一尘不染

为什么外部Java类可以访问内部类的私有成员?

java

我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码:

class ABC{
    class XYZ{
        private int x=10;
    }

    public static void main(String... args){
        ABC.XYZ xx = new ABC().new XYZ();
        System.out.println("Hello :: "+xx.x); ///Why is this allowed??
    }
}

为什么允许这种行为?


阅读 517

收藏
2020-03-03

共1个答案

一尘不染

内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们:

  1. 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。
  2. 即使在单独的类中,该功能也与外部类的工作方式紧密相关。

鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外部类的成员,因此可以访问外部类的方法和属性(包括私有类)是有意义的。

2020-03-03