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

2022-09-02 01:33:45

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

答案 1

是的,没关系。来自 JLS,第 6.6.1 节

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

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

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


答案 2

推荐