外部和内部类和静态方法

时间:2015-09-25 18:22:37

标签: java static-methods inner-classes

我理解一个内部类是非静态的,外类中的静态方法不能引用它。

我有这个代码,但是没有用,而且我理解为什么它不起作用。

class OuterClass {
    class InnerClass{}
    public static void outherMethod() {
        InnerClass i = new InnerClass();
    }
}

但是后来我有了其他代码,那可行,但我不明白为什么它与第一个不同。它为什么有效?

class OuterClass {
    class InnerClass{}
    public static void outherMethod() {
        InnerClass i = new OuterClass.new InnerClass();
    }
}

提前致谢!

编辑:它没有重复,因为它不是同一个问题。我不是在询问静态嵌套类,我是在询问静态方法和内部类

2 个答案:

答案 0 :(得分:6)

内部类总是需要封闭类的实例才能实例化。

OuterClass的静态方法没有OuterClass的实例,因此如果不提供封闭实例(InnerClass,则无法创建OuterClass的实例})。

InnerClass i = new InnerClass();

仅适用于OuterClass的实例方法。

InnerClass i = new OuterClass().new InnerClass();

在静态方法中工作,因为您正在创建OuterClass的实例,并将其用作InnerClass实例的封闭实例。

答案 1 :(得分:3)

这里要注意的关键点是Inner class是Outer class的成员。

因此,如果没有它的实例,您就无法访问它的成员。

直接来自docs

  

InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段。

     

要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();