作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我从 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但接受的答案意味着修改代码,为整个事物添加一个封闭类。我的问题是如何使用任何类型的限定符或引用来获取实例,如果可能的话。
最佳答案
假设你的类在包 com.test
中,你需要做的就是使用
new com.test.A().m();
使用类的完全限定名称。
如果您的类在默认包中,即。没有 package
声明,那么你就倒霉了,无法访问外部 A
。
关于Java 内部类隐藏外部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20270183/
我是一名优秀的程序员,十分优秀!