【发布时间】:2015-02-14 16:46:28
【问题描述】:
我刚开始学习Java,我明白了
- 与实例方法不同,实例变量不能被覆盖,并且在多态访问时不会被 JVM 在运行时动态选取。
- 执行流程:静态块、超级构造函数、初始化块和构造函数。
但我被困在一个代码中,我在其中多态地调用了一个实例变量,但它显示了被覆盖的值(它不应该显示)。实例变量在子类的 init 块中被覆盖。
package package1;
public class Other {
public static void main(String [] args){
Parent referToChild = new Child();
Parent referToChildTwo = new ChildTwo();
System.out.println("age as referred by referToChild reference variable is:" + referToChild.age);// prints 35 (doubt 1)
System.out.println("age as referred by referToChildTwo reference variable is:" + referToChildTwo.age);// prints 50 (doubt 2)
System.out.println("money as referred by Other reference variable is:" + referToChild.money);
//System.out.println("Other reference variable is:" + othObj.age);
}
}
class Child extends Parent{
// init block
{
age = 35;
}
}
class ChildTwo extends Parent{
public int age;
{
age = 40;
}
}
class Parent{
public int age = 50;
public int money = 100;
}
我得到的答案是:
35
50
100
所以我的疑问是:
疑问一:为什么显示“35”,应该显示超类变量的值是50。
疑点2:当它显示子类变量的最后一种情况时,为什么不显示这种情况。
【问题讨论】:
-
这就是为什么:ideone.com/QD1jbX
标签: java inheritance polymorphism