请问在引用内部类或静态嵌套类时,什么时候需要显式写出外部类的名称。
例如:
class B {
static class Inner {
int a = 10;
}
}
class Test extends B {
public static void main(String[] args) {
Test t = new Test();
Inner obj = new Inner();
System.out.println(obj.a);
}
}
想问的是什么情况下需要这样写:
B.Inner obj = new B.Inner();
代替
Inner obj = new Inner();
最佳答案
对于 static 嵌套类(正如 G. Fiedler 在他的回答中提到的那样)当您在 B 的范围内时,您可以编写
。 new Inner()
您还可以从 Test
中直接引用 Inner
,因为它扩展了 B
。
在所有其他情况下,您需要使用 B.Inner
和 new B.Inner()
。
内部类 - 根据定义不是 static
- 被不同地初始化。让我们看一下这个例子 B
:
class B {
public class Inner {
...
}
}
内部类总是绑定(bind)到外部类的实例。这意味着在这种情况下,必须有一个 B
的实例,我们才能实例化 Inner
。所以让我们这样做:
B b = new B();
顺便说一句,我假设我们目前在 B
范围之外的某个地方
为了创建 Inner
的实例,我们使用 B
的实例并编写:
B.Inner inner = b.new Inner();
但是,如果我们在 B
内部(在一个非静态 方法中),我们可以简单地写
Inner inner = new Inner();
因为我们 - 或者更确切地说是编译器 - 知道 B
的实例必须存在才能绑定(bind)到此 inner
。
关于java - Java 中的内部/静态嵌套类 - 外部类的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43172739/