多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征。这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。
java中子类可以看成是特殊的父类,所以父类的引用变量可以指向子类的对象:向上转型(upcastion)
当引用变量时如果编译时类型跟运行时类型不一致,就有可能出现多态。
SuperClass s = new SubClass()
对象的多态,Java中,子类的对象可以代替父类的对象使用。
一个变量只能有一种确定的数据类型。
一个引用类型变量可以引用多种不同的对象类型。
虚拟方法调用:
虚拟方法调用只有在多态情况下才可能出现。
SuperClass s = new SubClass();
s.method;//当method是SubClacc重写SuperClassde的方法时,就会出现虚拟方法调用
编译时S为SuperClass类型,方法调用的是SubClass类的method方法。
多态产生的前提:
需要存在继承或者实现关系
要有覆盖操作
成员方法:
编译时:会检查引用变量所属的类是不是有所调用的方法。
运行时:会调用实际对象所属的类中被重写的方法。
成员变量:
成员变量不存在覆盖,所以不会产生多态。只需要看引用变量所属的类就好。