我知道这是一个重复的问题,但是我想以一种非常具体的方式提出这个问题,以阐明一个非常重要的观点。主要的问题是:如果一个相同的类是静态嵌套类,而另一个是常规的顶层类,而不是访问包含类中的私有静态字段,则这些相同的类之间是否有任何区别?
// ContainingClass.java
public class ContainingClass {
private static String privateStaticField = "";
static class ContainedStaticClass {
public static void main(String[] args) {
ContainingClass.privateStaticField = "new value";
}
}
}
// OutsideClass.java
public class OutsideClass {
public static void main(String[] args) {
ContainingClass.privateStaticField = "new value"; // DOES NOT COMPILE!!
}
}
换句话说:
ContainedStaticClass
不能直接访问OutsideClass
的事实是OutsideClass
可以访问或可以执行的操作与ContainingClass.privateStaticField
可以访问或可以执行的操作之间的唯一唯一区别吗?还是存在其他通常不会讨论或遇到的细微差别? 最佳答案
您的说法是正确的:静态类和外部类之间的唯一区别是对类和封闭类成员的访问。 static
关键字声明该类不是内部类:实际上,它是封闭类范围内的外部类。
参见https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.5.1