我理解一个内部类是非静态的,外类中的静态方法不能引用它。
我有这个代码,但是没有用,而且我理解为什么它不起作用。
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();
}
}
提前致谢!
编辑:它没有重复,因为它不是同一个问题。我不是在询问静态嵌套类,我是在询问静态方法和内部类
答案 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();