Die*_*nso 5 java class shadowing
我从K&B书"SCJP Sun认证程序员Java 6学习指南"中获取了以下代码:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如书中所述,此代码打印"中间".我推断标记为"3"的类声明是标记为"1"的类,它是TestInners类的外部.如果这些类在不同的包中,我可以通过使用包名来限定其中一个来解决歧义.但在这种情况下,类不仅在同一个包中,而且在同一个文件中.如何获取外部类的实例?
我在这里看到了同样的问题,但是接受的答案意味着修改代码,为整个事物添加一个封闭的类.我的问题是如何使用任何类型的限定符或引用来获取实例,如果它甚至可能的话.
假设你的类在 package 中com.test,你需要做的就是使用
new com.test.A().m();
Run Code Online (Sandbox Code Playgroud)
使用类的完全限定名称。
如果您的类位于默认包中,即。没有package声明,那么你就不走运了,无法访问外部A。