在下面的代码片段中,看起来应该会出现一些编译错误,但实际上并没有:
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
。在 main()
函数中唯一的表达式 Outer.Inner.obj
预期显示 Inner
,但实际上没有。而是输出了 Optional
,这是因为它是 Optional
类的情况。
一种显示 Inner
的方法是将对象名称更改为其他名称。
static Optional Inner1 = new Optional();
根据输出显示,似乎选择了对象名称(或变量),而不是类型名称(类Inner
),因为它们具有相同的名称。这里应用了什么确切情况?