Presentation is loading. Please wait.

Presentation is loading. Please wait.

6. 6 Overloading methods and constructors 6

Similar presentations


Presentation on theme: "6. 6 Overloading methods and constructors 6"— Presentation transcript:

1 6. 6 Overloading methods and constructors 6
6.6 Overloading methods and constructors 6.8 packages and import statements

2 方法多載 方法 類別對「外」提供的服務 參數設計不佳可能導致呼叫程式的不便
若Cat類別提供Cat(short l, int w, int a)? Compile Lab6_10.java Compile Lab6_10a.java 主程式必須配合所要使用的方法 方法通常是public的,這些public methods類似站在餐廳櫃台的服務生,是對外提供服務的程式。 請學生把先前所寫的CalHI5.java改成Dog(short l, short w, short a)看看,思考其中的差異。 寫主程式的程式設計師其實不需要太多服務,不須要你幫忙按摩搥背,不過只希望寫方法的程式設計師多寫幾個overloaded methods 

3 方法多載 方法多載(method overloading) 繫結(binding)(p. 401) 特徵(p. 400)
Read two add() methods (p ) Compile Lab6_11.java 提供不同參數版本,提高服務水準 繫結(binding)(p. 401) 靜態繫結 (in compile time) Method overloading 是一群方法的現象,必須符合四種特徵(第四種特徵為語意上的,非語法上的)。 Lab6_11.java比課本的two add() methods更有教育效果,因為兩個版本的setData()真的執行相同任務。

4 方法多載 課堂練習 請依據課本p. 401的add方法,決定下列方法呼叫的繫結對象 add(20, 20);
Compile error

5 方法的signature Signature定義(p. 401) 下列方法的signature兩兩皆不同
方法名、參數(變數)個數、型態、順序 下列方法的signature兩兩皆不同 Add(int) add(int) add(int, String) add(String, int) add(int, String, String)

6 方法的signature 決定方法多載時的被呼叫者 回傳值型態不屬於signature的一部分 Compile Lab6_7_2.java
將其中一個方法的回傳值型態改成String試試看

7 建構式的多載 範例(p. 401-2) 不可能因為java自動提供no-arg多項式導致下列程式的出現
public Dog() {…} // added by programmer public Dog() {…} // automatically added by java? Read BankAccount.java (p. 403) 課堂討論:哪些方法被多載了? Run AccountTest.java (p. 407) & BankAccount.java 課堂討論:請說明程式的執行流程 Overloaded methods: BankAccount(), deposit(), withdraw(), setBalance()

8 建構式的多載 課堂討論(續) main() #22 (p. 407) 的建構式呼叫,會執行哪一個建構式? 請修改程式,證實你的答案
double temp = Double.parseDouble(input); 並且把第22行改成: BankAccount account = new BankAccount(temp); 請問main() #22 的建構式呼叫,會執行哪一個建構式? String version in line 36 Double version in line 25

9 課堂實作 Open Labs\CalHIOverloaded.java 本程式功能:計算狗貓健康指數 主程式的變化 注意:主程式不可更動
Amanda資料改以輸入框方式輸入 注意:主程式不可更動 請修改Dog class,以接受amanda的資料 註:Integer.parseInt()可將整數型字串轉換為int 解答置於LabAnswers\CalHIOverloadedAns.java

10 類別庫 Package的定義(p. 410) import指令(p. 410) java.lang的特殊地位(p. 401)
wildcard Try search for “no pain * gain” in Google java.lang的特殊地位(p. 401) 試著找到 java.lang in java api 觀察System以及out欄位 觀察String以及charAt方法 Wild card? 外卡

11 Overloading in API System是java.lang的類別 out是System的成員之一
請注意out的資料型態:PrintStream print/printf/println都是PrintStream的方法 課堂討論 三個方法中哪個多載程度最高? Compile Lab6_7_1.java 請依據API說明錯誤發生的原因 因為java以靜態繫結處理overloading methods的呼叫,有兩種可能可以成功呼叫overloaded method: (1) signature match; (2) signature not match but compatible。不過,如果compatible的method有兩個以上,那麼compiler仍然會拋出錯誤,因為無法確定要繫結哪一個。我猜想java API提供多種型態的System.out.println(),是因為要示範良好的coding style。另外,因應不同的primitive type來處理資料,記憶體上可能也會比較節省。

12 Overloading in API 下列狀況仍可成功繫結 方法名稱相同、 且方法參數個數相同、 且相對應參數的型態相容
Compile Lab6_7_3.java 因為java以靜態繫結處理overloading methods的呼叫,有兩種可能可以成功呼叫overloaded method: (1) signature match; (2) signature not match but compatible。不過,如果compatible的method有兩個以上,那麼compiler仍然會拋出錯誤,因為無法確定要繫結哪一個。 如果找不到型態完全相同的版本,但是卻找到多個相容版本,則java會視為ambiguous而發出compile error。For example, Call test(20, 20); public void test(int a, long b){} public void test(long a, int b){}

13 6.7 scope of instance fields

14 變數的分類 依據宣告位置 全域變數(global variable)[沒有掛上static] 區域變數(local variable)
該類別所屬物件均有一份儲存空間(non-static) 同一類別所有方法均可使用 區域變數(local variable) 含參數變數(parameter variable) 僅位於方法內;生命週期與方法同;並非一個物件一份 僅該方法可讀寫 位置決定意義與效果 See next slide 位置決定可視範圍

15 物件區 main length width number totalArea input kitchen bedroom den
宣告在方法內的變數 Rectangle kitchen = new Rectangle (); // line 17 in p. 372 物件區 length main width number totalArea input kitchen 宣告在方法外類別內的變數 private double length; // line 8 in p. 366 private double width; // line 9 in p. 366 bedroom den

16 變數的分類 Shadowing 定義(p. 409) Run Lab6_2.java Do Checkpoint 6.23 (p. 409)

17 課堂實作/作業 Open Labs\ConditionalFileReader.java
aaa.txt及bbb.txt為兩個內含正整數的檔案 本程式接受使用者輸入檔名(aaa.txt/bbb.txt) 印出檔案中的偶數和與奇數和

18 // _____________________
課堂實作/作業 第7行與第26行各自標示了 // _____________________ 請寫出正確的程式敘述 解答放置於LabAnswers\ConditionalFileReaderAns.java


Download ppt "6. 6 Overloading methods and constructors 6"

Similar presentations


Ads by Google