在下面的代码片段中,大概它应该发出一些编译错误,但它没有:
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();
)的一个对象(静态)
这个对象和类名(在 class 内Outer
)是相同的,即Inner
. 程序显示Optional
。预计会显示其中的唯一表达式Outer.Inner.obj
,但事实并非如此。然而,实际输出是类的情况。main()
Inner
Optional
Optional
一种显示方法Inner
是将对象名称更改为其他名称。
static Optional Inner1 = new Optional();
从它显示的输出来看,似乎对象名称(或变量)被选择而不是类型名称(类Inner
),因为它们具有相同的名称。这里应用了什么确切的案例?