在下面的代碼片段,想必看來,它應該發出一些編譯錯誤,但事實並非如此:使用一個內部類名和對象名稱在Java中相同
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
),因爲它們具有相同的名稱。這裏應用了什麼確切的案例?
+1非常好的答案! – GingerHead
Downvoter關心評論? – GingerHead
這確實是一個非常好的答案,這裏沒有提到這個問題。 – LuGo