方法重載是可能的僅當重載的方法具有不同的簽名。 如果簽名相同並且只有返回類型不同,則不可能。從Java文檔帶有不同簽名和返回類型的方法重載
報價:
鑑別方法時,編譯器不考慮返回類型,所以即使他們有不同的返回類型不能聲明兩種方法具有相同簽名。
但是,具有不同簽名和不同返回類型的重載方法同時出現什麼問題?爲什麼會出現錯誤?
方法重載是可能的僅當重載的方法具有不同的簽名。 如果簽名相同並且只有返回類型不同,則不可能。從Java文檔帶有不同簽名和返回類型的方法重載
報價:
鑑別方法時,編譯器不考慮返回類型,所以即使他們有不同的返回類型不能聲明兩種方法具有相同簽名。
但是,具有不同簽名和不同返回類型的重載方法同時出現什麼問題?爲什麼會出現錯誤?
這應該是確定每JLS 8.4.9:
...還有就是返回類型之間或拋出的兩種方法具有相同名稱的條款,除非他們的簽名是覆蓋當量之間沒有必要的關係。
例如,這個編譯並運行良好:
public class Test {
void move(int x, int y) {
System.out.println("inside void move(int x, int y)");
}
int move(double x, double y) {
System.out.println("inside int move(double x, double y)");
return 0;
}
public static void main(String[] args) {
Test test = new Test();
test.move(0, 0);
test.move(0.0, 0.0);
}
}
關於你貼的代碼,你的錯誤 - 你不返回任何東西!您的int a(...)
方法被聲明爲返回一個int,並且不返回任何內容。課程:閱讀錯誤消息。
代碼中的錯誤與方法重載無關。
你的第三個方法應該返回一個int。它有一個空的身體,所以它不會返回任何東西。如果您將其更改爲
int a(double q){
return 0;
}
錯誤就會消失
什麼是JLS必須要在這說什麼? – 2015-04-04 18:19:52
請顯示給出錯誤的代碼。 – Eran 2015-04-04 18:20:56
你的錯誤是 - 你沒有返回任何東西!你的'int a(...)'方法被聲明爲返回一個int並且你什麼也沒有返回。課程:閱讀錯誤消息。 – 2015-04-04 18:25:47