为什么会这样输出?
为什么输出中dog.mothod( );和重写toString( )方法的结果中age都为Animal类中的age的值10,而不是22,name都为dog.name="xiaoming",而不是“Cat”。
为什么输出中dog.mothod( );和重写toString( )方法的结果中age都为Animal类中的age的值10,而不是22,name都为dog.name="xiaoming",而不是“Cat”。
2016-09-06
在Dogs里面声明了age变量同时又继承了父类里面的age变量,这时候主程序对age赋值实际上是dog.this.age=22;而super.age的初始值是Animal定义的=10;
你在mothod函数里面调用super.eat函数使用的是super.age,也就是为10. 同时对于从Animal继承的toString函数里面调用的也是super.age,同样结果为10.
而name由于在子类没有被定义同名变量所以主函数赋值的xiaoming,从而在Animal里面赋值语句没有被执行,所以输出的都是xiaoming。
-----------------上面说的不太清楚,我从内存的角度说下吧-----------------
先实例Animal,内存:地址1-》age 地址2-》name;eat函数和toString调用地址1和地址2的变量
再接着实例Dogs,内存变成:地址1-》super.age 地址2-》name 地址3-》this.age;super.eat函数和toString调用地址1和地址2的变量;eat函数不调用变量;method函数调用super.eat函数;
主函数的age赋值给地址3,name赋值给地址2,Animal的age赋值给了地址1,name本该赋值给地址2但是主函数赋值过所以不操作;
希望这样表述你能明白
举报