Java - 重写方法没有看到实例变量

时间:2016-04-28 04:43:10

标签: java inheritance instance-variables override method-overriding

我对以下代码感到困惑...... 有人可以解释为什么重写方法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;
    }
}

}

0 个答案:

没有答案