关于内部类私有成员变量访问问题

3
假设有一个名为MyOuter的类,其中包含一个简单的内部类MyInner。在尝试学习内部类如何工作时,我试图理解外部类私有成员变量是否可以从内部类本身访问。
class MyOuter {
  private int x = 7;
  // inner class definition
  class MyInner {
    public void seeOuter() {
      System.out.println("Outer x is " + x);
    }
  } // close inner class definition
} // close outer class

根据我的分析,上述代码是完全合法的。请注意,内部类确实正在访问外部类的私有成员。这没问题,因为内部类也是外部类的成员。所以,就像外部类的任何成员(例如,实例方法)可以访问外部类的任何其他成员,无论是私有的还是不私有的一样,内部类(也是成员)也可以这样做。
请告知我的理由是否正确。

2
没错,但你可以问问你的编译器。 - zch
1个回答

2

内部类是其封闭类的成员,并直接访问该对象的方法和字段。有关更多信息,请参见嵌套类


难道OP也提到了同样的问题吗?“内部类也是外部类的成员。因此,就像外部类的任何成员(例如实例方法)可以访问外部类的任何其他成员,无论是私有的还是不私有的,内部类——也是一个成员——也可以做到同样的事情。” - Jayamohan
1
@Jayamohan,没错,这只是我说“是的,他是正确的”。然后我提供了一些参考资料。我不明白问题在哪里?另外,能否请那位投反对票的人解释一下? - mre
是的,如果回复中包含“是”的话,那就太好了,这也是我加上注释的原因。 - Jayamohan
1
访问严格来说并不是直接的。除非JIT编译器进行了优化。相反,在编译时,包私有访问器会在封闭类中合成。内部类使用这些访问器,而不是直接访问字段。 - erickson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接