如果我試圖在類Varargdemo
中重載方法flexiPrint()
,那麼它會生成編譯時錯誤。編譯器對待以下簽名相同:使用對象類參數變量和對象類數組參數變量的方法重載
public static void flexiPrint(Object... data){}
public static void flexiPrint(Object[] data){}
有人可以向我解釋爲什麼他們的處理方式相同嗎?我一直無法找到答案。
如果我試圖在類Varargdemo
中重載方法flexiPrint()
,那麼它會生成編譯時錯誤。編譯器對待以下簽名相同:使用對象類參數變量和對象類數組參數變量的方法重載
public static void flexiPrint(Object... data){}
public static void flexiPrint(Object[] data){}
有人可以向我解釋爲什麼他們的處理方式相同嗎?我一直無法找到答案。
Object...
只不過它是一個數組,這意味着相同的定義Object[]
...
(三個點)表示varargs在Java。
我們通常看到的主要方法,此簽名像main(String... args)
所以,有一個以上的方法用相同的簽名是不是在允許類(編譯時錯誤)。這就是爲什麼你看到編譯時錯誤。
它們是相同的「引擎蓋下」。可變參數(在...
)傳遞一個數組作爲參數:
它仍然是真實的多個參數必須在陣列中被傳遞,但可變參數功能自動化並隱藏過程。此外,它與預先存在的API向上兼容。
您可以在文檔here中找到它。
可變長度參數,如Object...
是句法糖。當使用,例如:
flexiPrint("apple", "peach", "plum");
然後 「蘋果」, 「桃」, 「李子」 實際上變成:`對象[] { 「蘋果」, 「桃」, 「李子」}。
方法重載指定具有相同名稱但返回類型和/或參數不同的第二個方法。方法重寫是你在你的答案中描述的(重寫超類方法)。 – Brian
你是對的!我的錯。 – bfishman
你最後的聲明是相同的簽名仍然是真實的,但感謝更正:) +1 – Brian