前期绑定与动态绑定
- 前期绑定
程序执行前就已经知道方法所属的类
注: final 、static、private修饰的方法是前期绑定,其余方法都是后期绑定
- 后期(动态)绑定
运行时根据对象的类型进行绑定(面向接口)
注:使用final可以关闭动态绑定,但不会增加性能
构造器
- 不具有多态,实际是static方法
- 父类构造器参数列表必须与子类相同,因为在new子类对象时首先会创建父类对象
- 主要用于初始化
协变返回类型
方法可以返回返回类型的导出类型
class AA{
}
class BB extends AA{
}
class A{
AA a() {return new AA();}
}
class B extends A{
AA a() {return new BB();}//允许返回更具体的类型
}
继承设计
- 向上转型
子类与基类接口方法相同,基类无需知道子类的信息,使用父类方法时只需子类向上转型
-
向下转型
向上转型的缺点: 当子类扩展了基类方法,使用向上转型不可以使用新方法,造成信息丢失
class A{ void a() {} } class B extends A{ void b() {} } public class DowntransforTest { public static void main(String[] args) { A[] x = {new A(),new B()}; ((B)x[0]).b();//报类转型异常:java.lang.ClassCastException ((B)x[1]).b(); } }