Java 关键字';新';特别是在我启动静态嵌套类时工作?
我在处理嵌套类和内部类。困难的部分是当我试图用关键字Java 关键字';新';特别是在我启动静态嵌套类时工作?,java,nested,Java,Nested,我在处理嵌套类和内部类。困难的部分是当我试图用关键字new启动内部类时 我希望新的outerObject.InnerClass()可以像 新建OuterClass.NestedClass()没有。它不起作用,但只有outerObject.new InnerClass()起作用。对我来说,关键字new跟在变量后面(outerObject在我的例子中)看起来非常怪异和混乱。为什么要这样?这背后的逻辑是什么 而且,outerObject.new NestedClass()不起作用,这对我来说意味着更多
new
启动内部类时
我希望新的outerObject.InnerClass()
可以像
新建OuterClass.NestedClass()
没有。它不起作用,但只有outerObject.new InnerClass()
起作用。对我来说,关键字new
跟在变量后面(outerObject
在我的例子中)看起来非常怪异和混乱。为什么要这样?这背后的逻辑是什么
而且,outerObject.new NestedClass()
不起作用,这对我来说意味着更多的秘密
请有人帮助我详细了解关键字
new
的工作原理。内部类的实例属于外部类的特定实例(这就是它与静态嵌套类的不同之处)。您必须说出outerInstance.new InnerClass()
来告诉Java这是哪个外部实例
另一方面,静态类没有关联的外部实例,因此通常只需使用new
指定类名(实际上,您可以直接导入嵌套类,然后只需说new NestedClass()
)
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);
}
}
}