public class Outer{
public class Inner{
}
}
public class Main {
public static void main(String[] args) {
Outer objOut = new Outer();
//Outer.Inner object1= objOut.new Inner(); // runes without a problem
//objOut.Inner object2= objOut.new Inner(); //gives error
}
}
这听起来有点业余,但是,Outer.Inner
和 objOut.Inner
之间有什么区别。
最佳答案
您不能将一个变量名用作另一个变量的类型,这是您尝试使用objOut.Inner
做的事情。变量的类型是 Inner
(或可选的 Outer.Inner
)。
因为 Inner
是一个 inner class ,它与其外部类(其封闭实例)的实例相关联。当您创建它的一个实例时,您可以选择¹指定它关联的对象实例,这就是您在 objOut.new Inner
中所做的。
这个例子可能有助于使它更清楚一点:
public class Example {
private String str;
public class Inner {
void show() {
// Show the string for the Example this Inner is part of
System.out.println(Example.this.str);
}
}
public Example(String s) {
this.str = s;
}
public static void main(String[] args) {
Example e1 = new Example("e1");
Example e2 = new Example("e2");
Inner i1 = e1.new Inner();
i1.show(); // "e1"
Inner i2 = e2.new Inner();
i2.show(); // "e2"
}
}
注意 i1
Inner
实例如何获取 e1
作为其封闭的 Example
实例,因此看到 e1
的 str
,但 i2
获取 e2
作为其封闭实例,因此它看到 e2
的 str
。
我建议 this Java tutorial获取更多信息。
¹ 有时它不是可选的,例如在我上面的 Example
类中,因为在使用 new Inner
的地方,没有它可以使用的默认实例。它在 Example
的 instance 方法中是可选的,但在那个 static
方法中不是。
关于java - 关于java类嵌套的一个疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58048344/