我知道这是一个重复的问题,但是我想以一种非常具体的方式提出这个问题,以阐明一个非常重要的观点。主要的问题是:如果一个相同的类是静态嵌套类,而另一个是常规的顶层类,而不是访问包含类中的私有静态字段,则这些相同的类之间是否有任何区别?

// 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

10-07 18:38