当内部类扩展外部类时,超级vs

时间:2017-04-04 13:13:21

标签: java

我在理解这段代码是如何工作方面遇到了一些麻烦。

public class Outer {

    private int num = 0;

    public void setNum(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public Outer inner() {
        return new Inner();
    }

    private class Inner extends Outer {

        public int getNum() {
            // do something extra
            return super.num; // changing to 'this.num' throws an error
        }
    }
}

正在运行

    Outer o = new Outer();
    Outer i = o.inner();
    o.setNum(4);
    i.setNum(5);
    System.out.println(i.getNum());

正确输出5,但如果我将super.num更改为this.num,则会收到错误The field Outer.num is not visible。当然,如果我将num设置为public,则代码确实有效。我只是不明白为什么它与super一起运行,而不是与this一起运行。

1 个答案:

答案 0 :(得分:0)

在Java中,基类的私有变量在任何其他类中都不可见,甚至对于派生类也是如此。 (使用受保护的)

我并不完全知道,但我建议,调用超级,你的类的行为就好像它是基类本身。也许一位java专家可以查看我的建议。