我在理解这段代码是如何工作方面遇到了一些麻烦。
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
一起运行。
答案 0 :(得分:0)
在Java中,基类的私有变量在任何其他类中都不可见,甚至对于派生类也是如此。 (使用受保护的)
我并不完全知道,但我建议,调用超级,你的类的行为就好像它是基类本身。也许一位java专家可以查看我的建议。