举例:

父类: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.在运行期间,默认情况下会先走父类的无参构造,其次是子类的无参构造