亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

方法重載不明確

方法重載不明確

搖曳的薔薇 2021-10-20 15:28:19
我目前正在復習 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個贊

沒有一個重載需要兩個整數。

因此,必須將其中一個整數擴展為浮點數。但哪一個?浮點數是第一個參數時存在重載,而浮點數是第二個參數時存在另一個重載。

應該選哪個?客觀上哪個更好?根據語言規范的規則,兩者都不是。因此曖昧。


查看完整回答
反對 回復 2021-10-20
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

對于ov.test(1,2)test(int i,float j)test(float i,int j)都是可訪問和適用的。然后編譯器需要選擇最具體的一個,而其中任何一個都不夠具體,因此會發生編譯器錯誤。

查看完整回答
反對 回復 2021-10-20
?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

由于沒有精度損失,Java 會自動將 int 轉換為 float。

因此,您test(1,2)可以解釋為兩個浮點參數,一個浮點數 - 一個整數,一個 int - 一個浮點數。因此對于編譯器來說是不明確的。


查看完整回答
反對 回復 2021-10-20
  • 3 回答
  • 0 關注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號