在Java中,内部类可以访问封闭类的私有成员。但是外层类可以访问内部类的私有成员吗?这与内部阶级是否是静态无关。我认为这不是真的,但以下代码似乎编译并正常工作。
public class Outer {
class Inner {
private int i = 0;
private Inner() {}
}
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner oi = o.new Inner();
oi.i = 10;
}
}
答案 0 :(得分:24)
是的,没关系。来自JLS,section 6.6.1:
否则,如果成员或构造函数声明为
private
,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。
你甚至可以在另一个嵌套类型Y中引用嵌套类型X的私有成员,只要它们共享一个顶级类。
在字节码级别,我相信这都是通过添加合成包访问方法来实现的。