举例:
父类:Person{}
子类:Child extends Person{}
父类的引用指向子类的对象:Person p = new Child();
理解:在编译期认为p是父类的对象,在运行期认为p是子类的对象,即对非静态属性和行为编译看左边,运行看右边
执行子类方法的情况:
1.子类重写了父类方法,当使用p去调用此方法会执行子类的方法
类比理解:父类是(国家),子类是(地方)。国家颁布政策(方法),地方要实施政策(方法),于是派了一个钦差(p)去地方监督执行,政策肯定要根据当地情况去执行;
2.子类中没有重写父类某方法,当使用p去调用该某方法的时候,执行的是父类的方法(类比理解:地方没有自己的政策,则使用国家统一政策)
3.子类想用p执行自己的特有的方法,可以向下转型:Child child = (Child) p;
对Person p = new Child();会触发哪些方法的理解
1.子类继承父类,对父类构造方法的要求
重点:子类的有参和无参构造中隐式的添加了父类的无参构造
2.在运行期间,默认情况下会先走父类的无参构造,其次是子类的无参构造
Best Regards