Java 快速導覽 - 物件導向概念 方法過載

Java 的方法可以過載 (overlaod) ,這是說類別中可以有相同名稱不同參數列 (parameter list) 的方法,如以下 add() 方法

public int add(int a, int b) {
    //相關程式碼
}
    
public double add(double a, int b) {
    //相關程式碼
}
    
public double add(int a, double b) {
    //相關程式碼
}
    
public double add(double a, double b) {
    //相關程式碼
}


方法名稱都為 add ,各自的參數列都不相同,所謂的不相同包括參數 (parameter) 的個數、型態、順序,因此
(double a, int b)



(int a, double b)


這兩個是不同的參數列。


過載的意義在於同一方法可以運用不同的參數列,也就是每個相同名稱的方法都可以有不同型態、不同數量的參數,舉例如下
class OverloadDemo {
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, int b) {
        return a + b;
    }
    
    public double add(int a, double b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }    
    
    public static void main(String[] args) {
        OverloadDemo demo = new OverloadDemo();
        int n1 = 2;
        int n2 = 4;
        double n3 = 2.5;
        double n4 = 3.8;
        
        System.out.println(n1 + "+" + n2 + "=" + demo.add(n1, n2));
        System.out.println(n1 + "+" + n3 + "=" + demo.add(n1, n3));
        System.out.println(n4 + "+" + n2 + "=" + demo.add(n4, n2));
        System.out.println(n3 + "+" + n4 + "=" + demo.add(n3, n4));
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:OverloadDemo.java
    功能:示範物件導向的基本觀念 
    作者:張凱慶
    時間:西元 2010 年 10 月 */


編譯後執行,結果如下



這有什麼好處呢?想一想,假如 add() 也可接收字串當成參數的話, add() 的內容就可以是字串型態的參數轉換成數字型態,然後進行相加,最後再回傳數字型態的回傳值。


如果只有回傳值型態不一樣,並不構成過載的條件。


中英文術語對照
過載overlaod
參數列parameter list
參數parameter






1 則留言:

Unknown 提到...

假如 add() 也可接收字串當成參數的話, add() 的內容就可以是字串型態的參數轉換成數字型態,然後進行相加,最後再回傳數字型態的回傳值。

這個我不太懂!
『 add( ) 』本來是放進數字型態進去運算,回傳值也是數字型態。
但是這裡經過「 Overload 」後,使得『 add( ) 』可以放進「 String字串型態 」,但回傳值仍為數字型態。
是這樣的意思嗎? 有點不確定你表達是不是這個意思!