问题:为什么输出的不是“意大利面”?(后面放我的理解)
我的理解:
①son.say()首先会在子类找到say()
②当计算机发现say()中有getName()时,又会在父类找到getName()
③getName()返回的是name属性,此时的gatName方法是在父类里面,返回的不应该是父类的name——"意大利面"吗?
因为子类定义了name,覆盖了父类的变量,
并且父类在这里定义没有意义,只有子类的值传给父类,父类的值不能传给子类。
不好理解吗?
子类继承父类的非私有属性和方法。
创建子类构造器的时候,初始化子类name为干拌面。
并调用子类的方法输出。
突然想到一个答案不知道对不对: 因为子类调用了父类的有参构造器,所以创建Son对象时实际上用的父类构造器。初始化的是父类的name,而子类的name未被初始化。
子类会继承父类中非私有方法,所以其实子类中是有一个叫getName的方法存在的,也就是说实际调用的是子类中的getName而不是父类中的geyName,所以输出的结果是子类的干拌面