代码说明及输出
在下面的代码中。我们有一个类TestInners,一个内部类 A,一个方法本地内部类A和一个外部类A .
- 当我们在
new A().m();
中实例化一个对象时,输出是 中间。 - 为了让程序输出inner,我们必须在go方法中的方法局部内部类A之后实例化对象。
- 如果我们注释内部类,程序将输出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/