首页 > 解决方案 > 静态内部类与非静态外部类

问题描述

为什么在 Main.class 中实例化一个 Foo 类(它的内部类)我必须用 static 关键字指定它,但是如果我将这个类作为外部类,那么没有'static'是可能的?

public class Main {

    public static void main(String[] args) {
        Foo foo = new Foo();
    }

//    class Foo { // to make it work I have to add 'static'
//    }
}

但如果 Foo.class 不是 Main.class 的内部类,它可以工作。

public class Main {

    public static void main(String[] args) {
        Foo foo = new Foo();
    }

}

class Foo {
}

标签: java

解决方案


如果您将该类声明为非静态内部类,则它属于外部类的一个实例。在您的静态主方法中,您没有实例(因为该方法是静态的),因此您不允许访问该类。

如果将其声明为外部类,则 Foo 类只是可以从静态和非静态方法访问的普通类,因为它不再属于外部类的实例。


推荐阅读