黑马连家华 发表于 2012-10-7 11:03
...B b = new B();的时候建立了一个B类的实例对象(在堆中),它获得了父类所有非私有方法,父类中同名方法或属 ...
"A a = b;这时候将对象b的引用(在栈中)传递给a(也在栈中),这时候是父类a引用指向了子类对象(就是上一步的new B()实例),产生了多态,父类引用得不到子类特有的方法,所以a.i值为10"
其实这个不是多态啦,多态要满足三个要素:
1 父类引用指向子类对象.
2 要有继承.
3 要有非静态方法重写.
而此处只满足了第1点,所以不是多态实现.
a.i为10也不是因为父类引用得不到子类特有的方法,而是成员属性(包括静态的与非静态的)不存在多态一说,而且静态方法也不存在多态一说,只有非静态方法才可能够成多态实现.
此处a.i为10,是因为a.i就是调用到A类的成员变量i而已. |