日期:2014-05-20  浏览次数:20658 次

上转型对象的问题(见扫描)
代码见下:
http://www.i2i.org.cn/webexhibit/09251.jpg
http://www.i2i.org.cn/webexhibit/09252.jpg
http://www.i2i.org.cn/webexhibit/09253.jpg
这三页书是讲上转型对象的。
其中有一个例子。又看不懂。
a=new   B();     //   创建了一个B的对象。a是子类对象的上转型变量
a.n=0.618;
a.m=200;
a.f()   ;     //输出的是n=0.618   m=200
a.g();     //输出的是n=12   m=200,这里不解,n不是被被a.n=618;改过了吗?怎么等于12了,它是什么时候等于12的?


------解决方案--------------------
我的理解是B类里的n属性把A类里的n属性本来就覆盖掉了,你A类里再怎么改n的属性都影响不了B类中的n属性,m的属性是继承来的,所以修改会影响,如果你一定要输出A的n属性(就是A的g()方法),就用A a=new A();a.g();
------解决方案--------------------
a=new B(); // 创建了一个B的对象。a是子类对象的上转型变量
这时如果B覆盖过被调用方法,是会调用子类的方法
其次当调用子类方法的时候,先会在子类中找与要用到的变量同名的成员变量,如果没找到,就去
父类继续找
如果B没有覆盖该方法,则调用A里定义的,找变量也从A开始找