首先 你创建对象的时候用的是父类引用指向子类对象
那么你在打印t.a的时候,变量a调用的是父类的成员变量a,
在继承的时候,成员变量跟方法是不同的,
多态中,父类引用调用方法时,先找子类,子类有就用子类的
而调用成员变量时,先找父类的,父类有就用父类的
那么你的t.a调用的就是父类的变量a,而你覆盖了父类的addFive()方法,
那么在t.addFive()的时候,调用的确是子类的方法.所以它不会给父类的变量做+=运算..
而打印结果是3而不是默认的0,是因为虽然子类不能继承父类的构造函数,但是子类在new对象的时候,
却必须先执行一个父类的构造函数,这点是程序员没办法避免的,所以也就把3赋给了a. |