![](/img/trans.png)
[英]Implement two interfaces with the same method signature but different return type
[英]method overloading with different signature and return type
僅當重載的方法具有不同的簽名時,方法重載才可能。 如果簽名相同並且只有返回類型不同,則不可能。
引用Java Docs:
區分方法時,編譯器不會考慮返回類型,因此即使兩個方法具有不同的返回類型,也無法聲明具有相同簽名的兩個方法。
但是,同時具有不同簽名和不同返回類型的重載方法有什么問題? 為什么會給出錯誤?
根據JLS 8.4.9,這應該可以:
...在相同名稱的兩個方法的返回類型之間或throws子句之間不存在必需的關系,除非它們的簽名是等效的。
例如,它可以編譯並正常運行:
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;
}
錯誤將消失
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.