1. 程式人生 > >Java基礎之方法過載(Overload)

Java基礎之方法過載(Overload)

同一個類中的多個方法可以有相同的方法名稱,但是有不同的引數列表,這就稱為方法過載(method overloading)。

過載(overloading) 是在一個類裡面,方法名字相同,而引數不同。返回型別可以相同也可以不同。

每個過載的方法(或者建構函式)都必須有一個獨一無二的引數型別列表。

最常用的地方就是構造器的過載。

引數列表又叫引數簽名,包括引數的型別引數的個數引數的順序,只要有一個不同就叫做引數列表不同。

過載是面向物件的一個基本特性。

舉個栗子

現有以下介面方法定義 public static String run(int code),但在後期需求變更時發現,該方法需要傳入額外的一個引數String name。

現要求在不改變原有方法定義的條件下,想辦法將name引數傳入方法中。

public interface Product {

    public static String run(int code) {
        String result = "編號:" + code;
        return result;
    }

    public static String run(int code, String name) {
        String result = "編號:" + code + ",名稱:" + name;
        return result;
    }

    public static void main(String[] args) {
        System.out.println(Product.run(001));
        System.out.println(Product.run(001, "你好!"));
    }

}

通過上面的例子,不難看出,過載就是在一個類中,有相同的函式名稱,但形參不同的函。過載的結果,可以讓一個程式段儘量減少程式碼和方法的種類。

說明:

  • 引數列表不同包括:個數不同、順序不同、型別不同。
  • 僅僅引數變數名稱不同是不可以的。
  • 跟成員方法一樣,構造方法也可以過載。
  • 宣告為final的方法不能被過載。
  • 宣告為static的方法不能被過載,但是能夠被在此宣告。

方法的過載的規則:

  • 方法名稱必須相同;
  • 引數列表必須不同;
  • 方法的返回型別可以相同也可以不相同;
  • 僅僅返回型別不同不足以稱為方法的過載;
  • 被過載的方法必須改變引數列表(引數個數或型別不一樣);
  • 被過載的方法可以改變返回型別;
  • 被過載的方法可以改變訪問修飾符;
  • 被過載的方法可以宣告新的或更廣的檢查異常;
  • 方法能夠在同一個類中或者在一個子類中被過載;
  • 無法以返回值型別作為過載函式的區分標準。

方法過載的實現:

方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯,這叫做過載分辨。