Java内部类阴影外部类

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类的外部.如果这些类在不同的包中,我可以通过使用包名来限定其中一个来解决歧义.但在这种情况下,类不仅在同一个包中,而且在同一个文件中.如何获取外部类的实例?

我在这里看到了同样的问题,但是接受的答案意味着修改代码,为整个事物添加一个封闭的类.我的问题是如何使用任何类型的限定符或引用来获取实例,如果它甚至可能的话.

Sot*_*lis 4

假设你的类在 package 中com.test,你需要做的就是使用

new com.test.A().m();
Run Code Online (Sandbox Code Playgroud)

使用类的完全限定名称。

如果您的类位于默认包中,即。没有package声明,那么你就不走运了,无法访问外部A

  • @LuiggiMendoza:我认为重点是,即使它们位于*相同的*包(和文件)中,这也会起作用。 (3认同)