簡體   English   中英

具有不同簽名和返回類型的方法重載

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM