在Java嵌套类中,封闭类是否可以访问内部类的私有成员?

在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; } } 

是的,没关系。 从JLS, 第6.6.1节 :

否则,如果成员或构造函数被声明为private ,则当且仅当它发生在包含成员或构造函数声明的顶级类(第7.6节)的主体内时才允许访问。

您甚至可以在另一个嵌套类型Y中引用嵌套类型X的私有成员,只要它们共享一个顶级类即可。

在字节码级别,我相信这都是通过添加合成包访问方法来实现的。