多态

mac2022-07-05  12

前期绑定与动态绑定

前期绑定

程序执行前就已经知道方法所属的类

注: 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(); } }

转载于:https://www.cnblogs.com/mdc1771344/p/9908799.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)