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

时间:2010-02-08 12:47:34

标签: java inner-classes

在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 个答案:

答案 0 :(得分:24)

是的,没关系。来自JLS,section 6.6.1

  

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

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

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

相关问题