一、什么是方法多載
方法的多載就是在同一個類中,有著若干個名字相同的方法,在具體呼叫這些方法的時候,通過傳遞引數的不同來呼叫這些多載方法,
二、為什么需要方法多載
- 方法名的定義需要做到見名知意,功能類似的方法一定程度上注定了方法名的相同,多載的使用有好的解決了這種因見名知意帶來的方法名沖突,
- 多載可以提高代碼的可讀性和可維護性,方法名相同的方法在一起能夠清晰知道每一個方法的區別,提高代碼可讀性,也方便后期的代碼維護,
三、方法多載的規則
- 方法名必須相同
public static int add(int a){ return a+1; } public static int add(int a,int b){ return a+b; } public static int add(int a,int b,int c){ return a+b+c; }方法名必須相同,比如這里的add()方法,如果第二個add()方法改成add2()那就不是方法多載了, - 方法的引數串列必須不相同,(方法的引數串列包括方法的引數個數以及引數型別和引數順序)
- 引數個數不相同,還是上面代碼:
public class Myclass { public static int add(int a){ return a+1; } public static int add(int a,int b){ return a+b; } public static int add(int a,int b,int c){ return a+b+c; } public static void main(String[] args) { System.out.println(add(1)); System.out.println(add(1,2)); System.out.println(add(1,2,3)); } }運行結果如下:
2 3 6
- 引數型別不相同
public class Myclass { public static void add(int a,int b){ System.out.println(a+b); } public static void add(double a,double b){ System.out.println(a+b); } public static void main(String[] args) { add(1,2); add(1.2,2.3); } }運行結果:
3 3.5
這里的引數不同,一個是int型別的引數,一個是double型別的引數,滿足多載的條件
- 引數順序不同也可以滿足多載
public class Myclass { public static double add(double b,int a){ return a+b; } public static double add(int a,double b){ return a*b; } public static void main(String[] args) { System.out.println(add(1.2,2)); System.out.println(add(2,2.0)); } }運行結果:
3.2 4.0
這里對引數順序進行調換位置,編譯器依舊能夠找到對應的方法,
- 方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯,這叫做多載分辨,
- 引數個數不相同,還是上面代碼:
四、方法多載的注意事項
- 方法的回傳型別可以相同也可以不相同,
這里讓引數保持一致,改變方法型別,根據IDEA提示發現無法在引數一致的時候通過方法回傳型別來進行方法多載
當適當的改變方法引數,代碼如下,編譯通過,
public class Myclass { public static int add(int a,int b){ return a+b; } public static double add(int a,double b){ return a+b; } public static void main(String[] args) { System.out.println(add(1,2)); //輸出3 System.out.println(add(1,2.0)); //輸出3.0 } }由上可知,方法多載的關鍵是在引數串列上,僅僅回傳型別不同不足以稱為方法的多載,方法的回傳型別可以相同也可以不相同,
- 方法的修飾符并不影響方法的多載,
我們改變上例中方法的修飾符,結果正常輸出:
public class Myclass { public static int add(int a,int b){ return a+b; } static double add(int a,double b){ return a+b; } public static void main(String[] args) { System.out.println(add(1,2)); //輸出3 System.out.println(add(1,2.0)); //輸出3.0 } } - main方法也可以被多載,
public class Myclass { public static void main(String name) { System.out.println(name+"你好"); } public static void main(String[] args) { main("ThreePure"); } }main方法可以多載,只不過虛擬機只呼叫帶字串公共型別的main方法,public static void main(String[] args){},
五、方法多載與方法重寫的區別
| 多載 | 重寫 | |
| 相同 | 方法名稱相同 | |
| 英文 | Overloading | Overiding |
| 范圍 | 同一個類 | 繼承中的子類 |
| 區別 | 需要引數串列不同 | 只有方法體不同,方法串列也必須相同 |
| 其他要求 | 對修飾符,回傳值型別沒有特殊要求 | 對權限等其他都有特定要求 |
區別多載和重寫的最好的判斷方法就是是否出現在繼承中,以及引數串列是否必須完全相同,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/111786.html
標籤:其他
上一篇:動力節點最新Dubbo視頻教程
