Java 從入門到進階之路(七)
- 2019 年 10 月 11 日
- 筆記
在之前的文章中我們介紹了一下 java 中的對象和類,接下來我們來看一下 Java 中的方法重載。
在顯示生活中,我們肯定會遇到這樣一個問題,那就是我們再商場買東西的時候在付賬時的選擇。如下
A:在收銀台處設三個窗口,分別滿足現金,手機,刷卡三種形式的付款。
B:可以設置一個窗口,這個窗口滿足以上三種付款方式。
對於消費者和商場而言,B 方案無疑比 A 方案更好,商場可以減少僱傭員工和佔地,消費者不必去刻意選擇支付方式。
在程式碼的世界裡,以上三種支付方式其實都是程式的運行,我們可以將上面的支付方式寫成一個 pay( ) 方法,
但是如果我們根據類型來區分支付方法,比如 payByMoney( ),payByPhone( ),payByCard( ),要是再有其他的支付方式我們還需要增加其他方法,比如還可以使用支票付款,手機付款又可以分為支付寶,微信,雲閃付等等,那麼對於程式碼的維護性和擴展性看來說很不友好,於是乎我們就可以利用重載來解決上面的問題。
Java 重載(overloading) 是在一個類裡面,方法名字相同,而參數不同。返回類型可以相同也可以不同。
每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型列表。
最常用的地方就是構造器的重載。
重載規則:
- 被重載的方法必須改變參數列表(參數個數或類型不一樣);
- 被重載的方法可以改變返回類型;
- 被重載的方法可以改變訪問修飾符;
- 被重載的方法可以聲明新的或更廣的檢查異常;
- 方法能夠在同一個類中或者在一個子類中被重載。
- 無法以返回值類型作為重載函數的區分標準。
1 public class HelloWorld { 2 public static void main(String[] args) { 3 Aoo aoo = new Aoo(); // 創建一個 Aoo 對象 4 aoo.foo(); // foo 無參 5 aoo.foo(123); // foo 整型參數123 6 aoo.foo("abc"); // foo 字元串參數zhangsan 7 aoo.foo("abc",123); // foo 字元串+整型參數abc123 8 aoo.foo(123,"abc"); // foo foo 整型+字元串參數123abc 9 } 10 } 11 12 class Aoo { 13 void foo() { 14 System.out.println("foo 無參"); 15 } 16 17 void foo(int num) { 18 System.out.println("foo 整型參數" + num); 19 } 20 21 void foo(String str) { 22 System.out.println("foo 字元串參數" + str); 23 } 24 25 void foo(String str, int num) { 26 System.out.println("foo 字元串+整型參數" + str + num); 27 } 28 29 void foo(int num, String str) { 30 System.out.println("foo 整型+字元串參數" + num + str); 31 } 32 }
在上面的程式碼中,我們定義了一個 Aoo 的類,在 Aoo 類里有一個 foo( ) 方法,我們通過向 foo( ) 內傳入不同的參數,在調用時傳入不同的蠶食,編譯器會自動根據其參數的不同,綁定到不同的方法。這樣我們就可以解決上面的支付問題,向 pay( ) 方法中傳入不同的參數來判斷不同的支付方式,當然支付是一個比較複雜的方法,這裡就不做演示了。