Java基礎之方法過載(Overload)
阿新 • • 發佈:2018-11-08
同一個類中的多個方法可以有相同的方法名稱,但是有不同的引數列表,這就稱為方法過載(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的方法不能被過載,但是能夠被在此宣告。
方法的過載的規則:
- 方法名稱必須相同;
- 引數列表必須不同;
- 方法的返回型別可以相同也可以不相同;
- 僅僅返回型別不同不足以稱為方法的過載;
- 被過載的方法必須改變引數列表(引數個數或型別不一樣);
- 被過載的方法可以改變返回型別;
- 被過載的方法可以改變訪問修飾符;
- 被過載的方法可以宣告新的或更廣的檢查異常;
- 方法能夠在同一個類中或者在一個子類中被過載;
- 無法以返回值型別作為過載函式的區分標準。
方法過載的實現:
方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯,這叫做過載分辨。