Java 内部类隐藏外部类

标签 java class shadowing

我从 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/

相关文章:

java - 验证消息在 Thymeleaf 中不起作用

java - 确定程序与哪个 Java 版本(或 Eclipse 版本)兼容

java - 如何将本地EngineeringCRS中的坐标转换为WGS84?

java - JButton,setText 不起作用?

python - Eclipse 上的 Pydev 运行错误(已删除)文件,该文件隐藏了 numpy 库

java - 从匿名类的角度来看,局部变量遮蔽的字段

java - 为什么在服务器端使用 .NET 和 Java?

c++ - 尝试学习类(class)和 'heap' c++

c++ - Xcode 链接器错误 Cocos2d-x Box2D CContactListener 构造函数未定义

Python __init__ 参数问题