我目前正在復習 OCA 考試,并認為 int/float 方法適用于第三次考試。在 Jeane Boyarsky 的 OCA Study Guide 中只說了 4 條順序規則來選擇正確的重載方法。按類型精確匹配較大的原始類型自動裝箱類型可變參數有人可以解釋為什么java說它不明確嗎?public static void main(String... args){ OverLoadingMethod ov=new OverLoadingMethod(); ov.test(1F,2); ov.test(1,2F); ov.test(1,2);}public void test(float i,int j){ System.out.println("float/int"); }public void test(int i,float j){ System.out.println("int/float"); }public void test(float i,float j){ System.out.println("float/float");}產生這個錯誤OverLoadingMethod.java:12: error: reference to test is ambiguous ov.test(1,2); ^ both method test(float,int) in OverLoadingMethod and method test(int,float) in OverLoadingMethod match
3 回答

繁花不似錦
TA貢獻1851條經驗 獲得超4個贊
沒有一個重載需要兩個整數。
因此,必須將其中一個整數擴展為浮點數。但哪一個?浮點數是第一個參數時存在重載,而浮點數是第二個參數時存在另一個重載。
應該選哪個?客觀上哪個更好?根據語言規范的規則,兩者都不是。因此曖昧。

慕虎7371278
TA貢獻1802條經驗 獲得超4個贊
對于ov.test(1,2)
,test(int i,float j)
和test(float i,int j)
都是可訪問和適用的。然后編譯器需要選擇最具體的一個,而其中任何一個都不夠具體,因此會發生編譯器錯誤。

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
由于沒有精度損失,Java 會自動將 int 轉換為 float。
因此,您test(1,2)
可以解釋為兩個浮點參數,一個浮點數 - 一個整數,一個 int - 一個浮點數。因此對于編譯器來說是不明確的。
添加回答
舉報
0/150
提交
取消