在下面的代码片段,想必看来,它应该发出一些编译错误,但它不会:
class Outer {
public static class Inner {
static String obj = "Inner";
}
static Optional Inner = new Optional();
//The (inner) class name and the object name are same.
}
class Optional {
String obj = "Optional";
}
public class Main {
public static void main(String[] args) {
System.out.println(Outer.Inner.obj);
//Refers to the string inside the optional class
}
}
类Outer
内部具有静态类名为Inner
。 另外,声明类的对象(静态) Optional
( static Optional Inner = new Optional();
)
该对象和类名(类内Outer
)是相同的,其是Inner
。 该程序将显示Optional
。 唯一表达Outer.Inner.obj
内main()
预期显示Inner
但它没有。 实际产量却Optional
这是的情况下, Optional
类。
显示的一种方式Inner
是通过改变对象名称来别的东西。
static Optional Inner1 = new Optional();
从它显示输出,看来对象名称(或可变)被选择在类型名称(类Inner
),因为它们具有相同的名称。 这里采用什么确切的情况?