public class aman {
void m(double a , int b, int c) {
System.out.println("second");
}
void m(float a , int b, double c) {
System.out.println("first");
}
public static void main(String[] args) {
aman obj = new aman();
obj.m(23, 12, 1);
}
}
在此,方法M()已被重載,但我不理解爲什麼呼叫是ambigous因爲在第一種方法中只有1次轉換需要而在第二種方法中,需要兩個轉換髮生。所以,絕對應該先調用第一種方法。請說明爲什麼沒有發生這種情況,或者我缺少一些規則。使用類型提升重載時,爲什麼方法調用不明確?
thnks爲您的答案,我已經通過它,並訪問http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5但在這裏我不能理解一行**如果第一個方法處理的任何調用可以傳遞給另一個方法而沒有編譯時類型錯誤,則一種方法比另一種方法更具體。**您能否解釋它 – Aman
當然。這句話基本上意味着,如果對第一種方法的任何調用也可以通過後一種方法解決,則可以認爲方法比另一種方法更具體。這意味着例如一個方法'm(Object)'可以解析所有對'm(User)'的調用(因爲'User'是一個'Object')。因此,我們可以說'm(User)'方法比另一個更具體,因爲對'm(Object)'(如'm(Integer)')的調用不能被'm(User)'解析,因爲那裏'Integer'和'User'之間沒有關係。 –
所以在我的情況下沒有方法更具體,是編譯時錯誤的原因? – Aman