class SuperclassA {
protected int superValue; // (1)
SuperclassA() { // (2)
System.out.println("Constructor in SuperclassA");
this.doValue(); // (3)
}
void doValue() { // (4)
this.superValue = 911;
System.out.println("superValue: " + this.superValue);
}
}
class SubclassB extends SuperclassA {
private int value = 800; // (5)
SubclassB() { // (6)
System.out.println("Constructor in SubclassB");
this.doValue();
System.out.println("superValue: " + this.superValue);
}
void doValue() { // (7)
System.out.println("value: " + this.value);
}
}
public class Javaapp {
public static void main(String[] args) {
System.out.println("Creating an object of SubclassB.");
new SubclassB(); // (8)
}
}
为什么我的输出:
Creating an object of SubclassB.
Constructor in SuperclassA
value: 0
Constructor in SubclassB
value: 800
superValue: 0
我想这应该是这样的:
Creating an object of SubclassB.
Constructor in SuperclassA
value: 800
Constructor in SubclassB
value: 800
superValue: 0
答案 0 :(得分:0)
SuperclassA
的{{1}}正在调用this.doValue()
中的doValue()
方法,SubClassB
在value
创建之前不会被初始化。有关详细信息,请参阅http://en.wikipedia.org/wiki/Method_overriding。
答案 1 :(得分:0)
您看到第一个0
输出value
的原因是value
的字段初始值设定项(将其设置为800)直到{的构造函数之前才会运行{1}}即将被召唤。在构造SubclassB
期间(必须在构造子类之前发生),SuperclassA
在其酉状态中被观察到,即0。