对象实例化:内部class和外部class同名(Java)

Object instantiation: Inner class and outer class with the same name (Java)

代码描述和输出

在下面的代码中。我们有一个classTestInners,一个innerclass一个,一个方法local innerclassA和一个外层classA.

  1. 当我们像 new A().m(); 那样实例化一个对象时,输出是 中间.
  2. 为了让程序输出inner我们必须在go[=39中的local inner classA方法之后实例化对象=]方法。
  3. 如果我们注释内部 class 程序将输出 outer.

问题

按原样在代码中。为什么它输出中间?是否优先考虑内部 classes?那么外面的 classes 呢?我一头雾水。


源代码

   class A { 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 { void m() { System.out.println("inner"); } }
            
        }
        class A { void m() { System.out.println("middle"); } }
    }

是的,如果您使用更多本地定义隐藏符号,the more local one is chosen。这最常发生在方法参数与实例字段之间,导致著名的 this.name = name 习语。

对于您的情况,您可以使用完全限定的 class 名称访问外部 class。

但不要这样命名 class。无缘无故的太多了。