2015-09-25 79 views
0

我知道内部类是非静态的,而外部类的静态方法不能引用它。外部和内部类和静态方法

我有这段代码,那是行不通的,我明白为什么这行不通。

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(); 
    } 
} 

在此先感谢!

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

回答

6

内部类总是以被实例化,需要封闭类的一个实例。

OuterClass静态方法不具有OuterClass一个实例,因此你不能没有提供(的OuterClass)的类实例创建的InnerClass一个实例。

InnerClass i = new InnerClass(); 

只能从OuterClass的实例方法中使用。从静态的方法,因为你正在创建的OuterClass一个实例,并把它作为封闭实例的InnerClass一个实例中

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

作品。

3

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

所以没有它的一个实例,你不能访问它的成员。

docs从直接

的将InnerClass实例只能在在OuterClass的实例存在,并且具有的方法和包含它的实例的字段的直接访问。

要实例化一个内部类,必须首先实例化外部类。然后,创建外部对象内的内对象与此语法:

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