java - 对象实例化 : Inner class and outer class with the same name (Java)

标签 java inner-classes

代码说明及输出

在下面的代码中。我们有一个类TestInners,一个内部类 A,一个方法本地内部类A和一个外部类A .

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

问题

按原样在代码中。为什么它输出中间?是否优先考虑内部类?那么外部类呢?我很困惑。


源代码

   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 习惯用法。

在您的情况下,您可以使用完全限定的类名访问外部类。

但是不要那样命名类。无缘无故的太多困惑。

关于java - 对象实例化 : Inner class and outer class with the same name (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40795534/

相关文章:

java - 如何在 JDBC 中设置游标类型?

java - 模拟 java.lang.Exception : Class should be public when I use inner classes in tests

java - 用java反射实例化私有(private)内部类

java - 密封内部类

java - 泛型,设置 ArrayList<?将 Option> 扩展到 ArrayList<OptionChild>

java - JSP 中的 Veracode 问题

java - @PathParam 的 Jersey 错误

java - 在类中传递通用对象类型

java - 是否可以在 displayMsg() 函数中访问 getVal() 函数?

java - 创建内部类对象时无法理解赋值运算符右边部分的逻辑