6. 6 Overloading methods and constructors 6

Slides:



Advertisements
Similar presentations
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
Advertisements

第6章 对象和类.
单元二:面向对象程序设计 任务二:借书卡程序设计.
第四章 类、对象和接口.
3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
JAVA 编 程 技 术 主编 贾振华 2010年1月.
第 9 章 物件的建構.
项目6 通用堆栈.
四資二甲 第三週作業 物件導向程式設計.
第7章 C#函數與.NET Framework類別函數庫
Part 2 開發Android應用程式的流程
OUTLINE Android app Devolpment Flow App反組譯解說 實例 簽名詳解 DalvikByteCode
第一章 面向对象程序设计.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
程設一.
第二章 JAVA语言基础.
第二部分 Java语言基础篇 第4章 Java语言与面向对象 (之一).
第 13 章 套件 (Packages).
1 Department of Computing.
第5章 Java中类、对象、接口 及包的概念 5.1 类的基本概念 5.2 类的继承概念 5.3 抽象类和接口 5.4 包.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
程設一.
2.1 基本資料型別 2.2 變數 2.3 運算式與運算子 2.4 輸出與輸入資料 2.5 資料型別轉換 2.6 實例
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
物件導向程式設計 (Object-Oriented rogramming)
第二章 C# 基础知识.
Java基础 JavaSE异常.
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
實作輔導 日期: 3/11 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
Scope & Lifetime 前言 Local Scope Global Functions & Objects
第六章 类的扩展与继承.
程式敘述執行順序的轉移 控制與重複、方法 Lecturer:曾學文.
第3章 語法入門 第一個Java程式 文字模式下與程式互動 資料、運算 流程控制.
第 7 章 陣列 (Array).
程式設計實作.
CH09 套件 物件導向程式設計(II).
第 6 章 函式.
Java程序设计 第9章 继承和多态.
中国矿大计算机学院杨东平 第5章 接口和包 中国矿大计算机学院杨东平
辅导课程九.
實作輔導 3 日期: 4/14(星期六) 09:10~12:00、13:10~16:00
Java程序设计 第2章 基本数据类型及操作.
Ch02-基礎語法.
* 單元:電腦與問題解決 主題:Java物件導向程式設計-類別與物件 台南縣國立善化高中 蕭嘉民 老師
第三章 C# 基础知识.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
實作輔導 2 日期: 3/24(星期六) 09:10~16:00 地點:臺北市立大學 臺北市中正區愛國西路一號 (中正紀念堂站7號出口)
第二章Java基本程序设计.
第二章 Java基本语法 讲师:复凡.
C#程序设计基础 $3 成员、变量和常量.
CH10. 屬性與方法.
Java程式初體驗大綱 大綱 在學程式之前及本書常用名詞解釋 Hello Java!程式 在Dos下編譯、執行程式
Interfaces and Packages
第二章 Java语法基础.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.

Review 1~3.
龍老師我不會Debug QQ.
第二章 Java基本语法 讲师:复凡.
方法進階及物件導向基礎 Lecturer: 楊昌樺.
PPT注意事项: 当前PPT课件文件必须和提供的源代码文件夹“代码”在同一目录中即不要移动文件夹“代码”的默认位置。
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
05 方法. 05 方法 5.1 方法 在一個較大型的程式中,通常會將具有特定功能或經常重複使用的程式,撰寫成獨立的小單元,稱為「方法」(Method),並賦予方法一個名稱,當程式需要時就可以呼叫此方法來執行該段特定程式。(此種重複使用的程式小單元在其他語言中可能稱為程序、副程式或函式, Visual.
第二章 Java基础语法 北京传智播客教育
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
Summary
Presentation transcript:

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

方法多載 方法 類別對「外」提供的服務 參數設計不佳可能導致呼叫程式的不便 若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 

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

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

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

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

建構式的多載 範例(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()

建構式的多載 課堂討論(續) 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

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

類別庫 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? 外卡

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來處理資料,記憶體上可能也會比較節省。

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){}

6.7 scope of instance fields

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

物件區 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

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

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

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