为什么使用封闭类的示例,静态嵌套类不能被示例化?

roqulrg3  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(451)

我知道可以直接访问类的静态成员,而不需要封闭类的示例。

class Outer
{
    static int a = 10;

    public static void main(String[] args)
    {
        System.out.println(a);//without using instance
    }
}

但是,同样的静态成员也可以通过类的示例访问。因为它们在特定类的所有示例中共享。

class Outer
{
    static int a = 10;

    public static void main(String[] args)
    {
        System.out.println(new Outer().a);//with using instance
    }
}

所有这些似乎只有在使用静态变量和静态方法时才是好的,当尝试使用静态嵌套类时,会导致编译错误:限定静态类的new。

class Outer
{
    static class Nested
    {
        int a = 10;
    }

    public static void main(String[] args)
    {
        System.out.println(new Outer().new Nested().a);
    }
}

与其他静态成员类似,即使这样也应该是可能的。不是吗?有什么我遗漏的内部细节吗?

k2fxgqgv

k2fxgqgv1#

请参阅本教程的内容:
注意:静态嵌套类与其外部类(和其他类)的示例成员进行交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是为了方便打包而嵌套在另一个顶级类中的顶级类。
顶级类只是一个不嵌套在另一个类中的类。
因此,静态嵌套类与非嵌套类没有区别。在你的例子中 NestedOuter 在它的行为中;可以在外面宣布 Outer . 因此 new Outer().new Nested() 无效语法。嵌套静态类只是为了方便打包,因此 new Outer.Nested() 工作,就像例如。 new java.util.ArrayList<String>() 作品。

相关问题