1.抽象类名作为形参和返回值
实际上形参和返回值需要的都是new出的子类对象
方法的形参是抽象类名/接口名,其实需要的是该抽象类的子类对象/该接口的实现类对象
方法的返回值是抽象类名/接口名,其实返回的值是该抽象类的子类对象/该接口的实现类对象
需要向上转型
2接口作为形参和返回值
方法的形参是接口名,其实需要的是该接口的实现类对象
方法的返回值是接口名,其实返回的值是该接口的实现类对象
和抽象类一样
3.内部类
一般使用方式:
3.1局部内部类
3.2匿名内部类
new 父类构造器(实参列表) | 实现接口()
{
//匿名内部类的类体部分 匿名内部类是子类
}
从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。
两条规则。
匿名内部类不能是抽象类。
匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以初始化块,可以通过初始化块来完成构造器需要完成的工作。
匿名内部类在开发中的使用
匿名内部类两种写法:
情况一: 接口、抽象类使用:相当于不用特意去写一个类去实现这个接口的方法,直接在实例化的时候就写好这个方法(接口、抽象类不能实例化,所以采用匿名内部类的方式来写)
这种情况就是接口或抽象类作为参数,这就在 User user=new User (new xxClass);
情况二:当接口作为参数放在方法体里的时候,用new 接口()的方式来实例独享,这时候是重新继承接口或者抽象类的方法
第二种就是不作为参数, User user=new User()
{
重新接口的方法
}
匿名内部类的两种场景的写法 - 程序员大本营https://www.pianshen.com/article/5373800293/