1. 程式人生 > >Java 從入門到進階之路(七)

Java 從入門到進階之路(七)

在之前的文章中我們介紹了一下 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( ) 方法中傳入不同的引數來判斷不同的支付方式,當然支付是一個比較複雜的方法,這裡就不做演示了。

&n