理解:同一个对象引用在不同的地方代表不同的实现;
1多态的前提:
A:有继承或者实现关系。
B:有方法重写。
C:有父类或者父接口引用指向子类对象。
2分类:
具体类多态
class Son extends Father{}
Father father=new Son()
抽象类多态
abstract class Father {}
class Son extends Father {}
Father father=new Son()
接口多态
interface Father {}
class Son implements Father {}
Father father=new Son()
3多态中的成员访问特点
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类构造
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
4多态的内存执行顺序
Father father=new Son()
1:在栈中为Father father分配内存空间
2:在堆中为new Son()分配内存空间
3:在堆中对Father 成员变量初始化,并获取方法区Father 成员方法的内存地址
4:在堆中对Son成员变量初始化,并获取方法区Son成员方法的内存地址
5:最后将new son()的内存地址给对象引用father