我对以下代码感到困惑...... 有人可以解释为什么重写方法getX()会打印出与 getX_1()不同的结果,以及为什么它会在父构造函数和类外部打印不同的结果? (这不是关于“多态字段”的问题,因为没有字段在类外部访问,它是关于在内部或构造函数外部调用的方法的不同行为,以及实际初始化实例字段时)。
public class TestInstanceVars {
public static void main(String[] args) {
C c = new C();
p("----- Third ----");
c.getX(); // 3 ... initilized!
}
private static void p(Object x){
System.out.println(x);
}
private static class A {
int x = 1;
A() {
p("----- First ----");
getX(); // 0 ... uninitialized ?
getX_1(); // 1 ... initialized ?
}
public int getX(){
p("Inside A::getX() ... x = " + x);
return x;
}
public int getX_1(){
p("Inside A::getX_1() ... x = " + x);
return x;
}
}
private static class B extends A {
int x = 2;
B() {
p("----- Second ----");
getX(); // 0 ... uninitialized
getX_1(); // 1 ... initialized ?
}
}
private static class C extends B {
int x = 3;
@Override
public int getX(){
p("Inside C::getX() ... x = " + x);
return x;
}
}
}