私有成员可访问性

Ami*_*mar 2 java java-8

我有一个用例,我将其简化为以下程序:

public class A {
   private int x = 100;

    class B {
       private int y = new A().x;
    }

  public static void main(String []s) {
    System.out.println(new A().new B().y);
  }
}
Run Code Online (Sandbox Code Playgroud)

该程序运行良好并打印100.

根据文档(访问修饰符):private修饰符确保该字段只能在其自己的类中访问。但在上面的程序中,它似乎自相矛盾。

这是那个意思吗?

  1. 内部类可以访问外部类的私有成员。
  2. 内部类的私有变量可以在外部类中访问。

请帮我理解。

Jon*_*eet 5

Java 语言规范是有关该语言的准确信息的更好来源。

在这种情况下,相关部分在第 6.6.1 条中

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

那“顶级类型的体内”是重要的部分。

所以基本上,在同一顶级类型的主体内(A在你的情况下),所有代码(无论是否以嵌套类型编写)都可以访问同一主体内的任何私有构造函数/成员声明(无论是否以嵌套类型声明)或不)。