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 |
參考資料
http://download.oracle.com/javase/tutorial/java/javaOO/methods.html
http://java.sun.com/docs/books/jls/third_edition/html/classes.html
http://download.oracle.com/javase/tutorial/java/javaOO/methods.html
http://java.sun.com/docs/books/jls/third_edition/html/classes.html
1 則留言:
假如 add() 也可接收字串當成參數的話, add() 的內容就可以是字串型態的參數轉換成數字型態,然後進行相加,最後再回傳數字型態的回傳值。
這個我不太懂!
『 add( ) 』本來是放進數字型態進去運算,回傳值也是數字型態。
但是這裡經過「 Overload 」後,使得『 add( ) 』可以放進「 String字串型態 」,但回傳值仍為數字型態。
是這樣的意思嗎? 有點不確定你表達是不是這個意思!
張貼留言