21

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

1 回答 1

26

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

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

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

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

于 2010-02-08T12:50:28.633 回答