public class NestedClassTest {
public static void main(String[] args){
OuterClass.NestedClass nestedObject = new OuterClass.NestedClass();
nestedObject.printX();
OuterClass outerObject = new OuterClass();
//OuterClass.InnerClass innerObject = new outerObject.InnerClass(); //Error!
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.printY();
//OuterClass.NestedClass objectOfNested2 = outerObject.new NestedClass(); //Error!
}
}
class OuterClass{
static int x = 10;
int y = 100;
static class NestedClass{
void printX(){
System.out.println(x);
}
}
class InnerClass{
void printY(){
System.out.println(y);
}
}
}
我正在玩嵌套类和内部类。困难的部分是当我尝试使用关键字new
启动内部类时。
我希望new outerObject.InnerClass()
可以正常工作
new OuterClass.NestedClass()
做到了。它没有用,只有outerObject.new InnerClass()
有效。对我而言,关键字new
位于变量之后(在我的情况下为outerObject
)似乎非常令人毛骨悚然和令人困惑。为什么要这样?这背后的逻辑是什么?
此外,outerObject.new NestedClass()
没有效果,这对我来说意味着更多的谜团。
请有人帮我理解关键字new
的详细信息。
答案 0 :(得分:1)
内部类的实例属于外部类的特定实例(这是使它与静态嵌套类不同的原因)。你必须说outerInstance.new InnerClass()
来告诉Java哪个外部实例。
另一方面,静态类没有关联的外部实例,因此您只需通常使用new
指定类名(实际上,您可以直接导入嵌套类,然后您就可以了说new NestedClass()
)。