【问题标题】:In Java nested classes, can the enclosing class access private members of inner classes?在Java嵌套类中,封闭类可以访问内部类的私有成员吗?
【发布时间】:2011-01-14 08:43:24
【问题描述】:

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

【问题讨论】:

  • 看起来和我预期的一样。除了你的意思是 oi.i = 10; 是吗?
  • 我不明白。代码就在这里。我知道输出。我知道它有效。我想了解它背后的原因。你认为这个问题不值得回答吗?
  • 你能提供需要这种结构的例子吗?如果你想知道理论上是可以的,但我以前从未遇到过)

标签: java inner-classes


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2015-01-26
    • 2023-03-29
    • 2013-11-13
    • 2015-04-16
    • 2018-11-23
    • 2015-07-16
    相关资源
    最近更新 更多