静态内部类与非静态外部类

时间:2019-06-19 11:07:07

标签: java

为什么要在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 {
}

1 个答案:

答案 0 :(得分:0)

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

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