【发布时间】:2013-11-28 15:48:13
【问题描述】:
我从 K&B 书籍“SCJP Sun Certified Programmer for Java 6 Study Guide”中获取了以下代码:
class A { // 1
void m() {
System.out.println("outer");
}
}
public class TestInners {
public static void main(String[] args) {
new TestInners().go();
}
void go() {
new A().m();
class A { // 2
void m() {
System.out.println("inner");
}
}
}
class A { // 3
void m() {
System.out.println("middle");
}
}
}
如书中所述,此代码打印“中间”。我推断标记为“3”的类声明隐藏了标记为“1”的类声明,它在 TestInners 类的外部。 如果这些类位于不同的包中,我可以通过使用包名限定其中一个来解决歧义。但在这种情况下,这些类不仅在同一个包中,而且在同一个文件中。如何获取外部类的实例?
我看到了同样的问题here,但接受的答案意味着修改代码,为整个事情添加一个封闭类。我的问题是如何使用任何类型的限定符或引用来获取实例,如果可能的话。
【问题讨论】:
-
如果它们在 any 包中,比如“p”,您可以将“p.A”用于//1,将“p.TestInners.A”用于//3。否则,我认为不可能明确地引用它们。由于您必须违反编码标准才能达到这一点(没有包的类),但这在实践中不是问题。