




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 2 回顧 在Java程序中,代碼封裝帶給我們的 好處是什么? 舉例說明什么是方法重載? Java中的構(gòu)造方法與實例方法,有什 么區(qū)別? 3 掌握繼承 掌握super關(guān)鍵字 掌握多態(tài) 本章目標 4 生活中的繼承1 生活中,繼承的例子隨處可見 動物動物 食草動物食草動物食肉動物食肉動物 誰是父類?誰是父類? 誰是子類?誰是子類? 能說出繼承的特點嗎?能說出繼承的特點嗎? 繼承需要符合的關(guān)系:繼承需要符合的關(guān)系:is-a,父類更通用、子類更具體,父類更通用、子類更具體 5 生活中的繼承2 子類具有父類的一般特性(包括屬性和行 為),以及自身特殊的特性 巴士是汽車嗎?巴士是汽車嗎? 卡車是汽車嗎?卡
2、車是汽車嗎? 出租車是汽車嗎?出租車是汽車嗎? 最大載客數(shù)量最大載客數(shù)量 報站報站 引擎數(shù)量引擎數(shù)量 外觀顏色外觀顏色 剎車剎車 加速加速 汽車汽車 最大載重量最大載重量 卸貨卸貨 所屬公司所屬公司 最大載客數(shù)量最大載客數(shù)量 打發(fā)票打發(fā)票 屬性屬性 行為行為 請問:出租車請問:出租車 包含哪些屬性包含哪些屬性 和行為呢?和行為呢? 6 為什么需要繼承1 開發(fā)教員類,其中教員分為Java教員以 及.NET教員,各自的要求如下: Java教員 屬性:姓名、所屬中心屬性:姓名、所屬中心 方法:授課(步驟:打開方法:授課(步驟:打開Eclipse、實施理論課授課)、實施理論課授課)、 自我介紹自我介紹
3、 .NET教員 屬性:姓名、所屬中心屬性:姓名、所屬中心 方法:授課(步驟:打開方法:授課(步驟:打開Visual studio 2005、實施理、實施理 論課授課)、自我介紹論課授課)、自我介紹 7 請問:以下這個解決方案中存在著什么問 題? 為什么需要繼承 2 public class DotNetTeacher private String name; / 教員姓名教員姓名 private String school; / 所在中心所在中心 public DotNetTeacher(String myName, String mySchool) name = myName; school
4、 = mySchool; public void giveLession() System.out.println(啟動啟動 Visual Studio 2005); System.out.println(知識點講解知識點講解); System.out.println(總結(jié)提問總結(jié)提問); public void introduction() System.out.println(大家好!我是大家好!我是 + school + 的的 + name + .); public class JavaTeacher private String name; / 教員姓名教員姓名 private Str
5、ing school; / 所在中心所在中心 public JavaTeacher(String myName, String mySchool) name = myName; school = mySchool; public void giveLession() System.out.println(啟動啟動 Eclipse); System.out.println(知識點講解知識點講解); System.out.println(總結(jié)提問總結(jié)提問); public void introduction() System.out.println(大家好!我是大家好!我是 + school +
6、的的 + name + .); 代碼存在重復(fù),違背了代碼存在重復(fù),違背了“write once, only once”的原則的原則 8 為什么需要繼承 3 如何改進?有沒有可能建立繼承關(guān)系,讓 子類自動繼承父類的屬性和方法? Java教員是教員嗎?教員是教員嗎? .NET教員是教員嗎?教員是教員嗎? public class Teacher private String name; / 教員姓名教員姓名 private String school; / 所在中心所在中心 public Teacher(String myName, String mySchool) name = myName;
7、school = mySchool; public void giveLesson() System.out.println(知識點講解知識點講解); System.out.println(總結(jié)提問總結(jié)提問); public void introduction() System.out.println(大家好!我是大家好!我是 “ + school + 的的 + name + 。); 現(xiàn)在,所有子類中相同的代碼現(xiàn)在,所有子類中相同的代碼 都抽取到父類中了都抽取到父類中了 屬屬 性性 行行 為為 姓名姓名 所在中心所在中心 授課授課 自我介紹自我介紹 教員教員 Java教員教員.NET教員教員
8、9 為什么需要繼承 4-4 public class JavaTeacher2 extends Teacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動啟動 Eclipse); super.giveLesson(); public class DotNetTeacher2 extends Teacher public AccpDotNetTeacher2(String myName, Str
9、ing mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動啟動 Visual Studio .NET); super.giveLesson(); 使用繼承,可以有效實現(xiàn)代碼復(fù)用使用繼承,可以有效實現(xiàn)代碼復(fù)用 子類自動繼承父類的屬性子類自動繼承父類的屬性 和方法,子類中不再存在和方法,子類中不再存在 重復(fù)代碼重復(fù)代碼 10 如何實現(xiàn)繼承 1 在Java語言中,用extends關(guān)鍵字來表示一 個類繼承了另一個類,例如: public class JavaTeacher2 extends
10、Teacher /其余代碼省略其余代碼省略 在父類中只定義一些通用的屬性與方法, 例如: public class Teacher private String name; / 教員姓名教員姓名 private String school; / 所在中心所在中心 public Teacher(String myName, String mySchool) /初始化屬性值初始化屬性值 public void giveLesson() /授課方法的具體實現(xiàn)授課方法的具體實現(xiàn) public void introduction() /自我介紹方法的具體實現(xiàn)自我介紹方法的具體實現(xiàn) 11 如何實現(xiàn)繼承 2
11、 子類自動繼承父類的屬性和方法,子類中 可以定義特定的屬性和方法 public class Teacher private String name; / 教員姓名教員姓名 private String school;/ 所在中心所在中心 public Teacher (String myName, String mySchool) /初始化屬性值初始化屬性值 public void giveLesson() /授課方法的具體實現(xiàn)授課方法的具體實現(xiàn) public void introduction() /自我介紹方法的具體實現(xiàn)自我介紹方法的具體實現(xiàn) public class JavaTeache
12、r2 extends AccpTeacher public JavaTeacher2(String myName, String mySchool) super(myName, mySchool); public void giveLesson() System.out.println(啟動啟動Eclipse); super.giveLesson(); 由于由于giveLesson()方法與方法與 父類的實現(xiàn)有所不同,因父類的實現(xiàn)有所不同,因 此重寫了該方法此重寫了該方法 方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表、返回類型和訪問修飾符方法重寫:子類和父類的方法具有相同的名稱、參數(shù)列表
13、、返回類型和訪問修飾符 父類中的屬性和方法可父類中的屬性和方法可 以被子類繼承以被子類繼承 12 public class JavaTeacher2 extends Teacher public AccpJavaTeacher2(String myName, String mySchool) super(myName, mySchool); 如何實現(xiàn)繼承 3 子類的構(gòu)造方法中,通過super關(guān)鍵字調(diào)用 父類的構(gòu)造方法 方法重寫后,通過super關(guān)鍵字調(diào)用父類 的方法 public class JavaTeacher2 extends Teacher public void giveLesson
14、() System.out.println(啟動啟動 Eclipse); super.giveLesson(); 通過調(diào)用父類的構(gòu)造方法,通過調(diào)用父類的構(gòu)造方法, 完成對屬性值的初始化完成對屬性值的初始化 13 一切類的“祖先”O(jiān)bject 在Java 中,所有的Java類都直接或間接地 繼承了java.lang.Object類 public class MyObject / public class MyObect extends Object / 在在Eclipse中調(diào)用中調(diào)用MyObject 對象的成員,會自動彈出繼對象的成員,會自動彈出繼 承自承自O(shè)bject的所有方法的所有方法 14
15、 小結(jié) 1 請編碼實現(xiàn)動物世界的繼承關(guān)系: 動物(Animal)具有行為:吃(eat)、 睡覺(sleep) 動物包括:兔子(Rabbit),老虎 (Tiger) 這些動物吃的行為各不相同(兔子吃草, 老虎吃肉);但睡覺的行為是一致的 請通過繼承實現(xiàn)以上需求,并編寫測 試類AnimalTest進行測試 15 為什么需要多態(tài) 1 在教員類的基礎(chǔ)上,開發(fā)一個類代表總 部,負責(zé)對各教員進行評估,評估內(nèi)容 包括: 1、教員的自我介紹 2、教員的授課 16 為什么需要多態(tài) 2 public class HQ1 public void judge(JavaTeacher2 t) roductio
16、n(); t.giveLesson(); public void judge(DotNetTeacher2 t) roduction(); t.giveLesson(); public static void main(String args) HQ1 hq = new HQ1(); hq.judge(new JavaTeacher2(李明李明,北京中心北京中心“); hq.judge(new DotNetTeacher2(張明張明,天津中心天津中心“); 第一種解決方案 大家好!我是北京中心的李明大家好!我是北京中心的李明. 啟動啟動 Eclipse 知識點講解知識點講解 總結(jié)提問
17、總結(jié)提問 大家好!我是天津中心的張明大家好!我是天津中心的張明. 啟動啟動 Visual Studio 2005 知識點講解知識點講解 總結(jié)提問總結(jié)提問 控制臺輸出控制臺輸出 17 為什么需要多態(tài) 3 現(xiàn)在,升級教員類,增加一種新類型: DBTeacher,該類型的教員專門負責(zé)教授 數(shù)據(jù)庫,要求如下: 屬性:姓名、所屬中心 方法:授課(啟動Sql Server、實施理論課授 課)、自我介紹 同時,總部也負責(zé)對這類教員進行評估 18 為什么需要多態(tài) 4 如果在第一種解決方案的基礎(chǔ)上去解決, 我們需要如下兩個步驟: 建立DBTeacher類 修改總部類,增加方法:judge(DBTeacher t
18、) 每增加一種新的教員類型,都要修改總部類,增加相應(yīng)的每增加一種新的教員類型,都要修改總部類,增加相應(yīng)的 judge(評估評估)方法,代碼的可擴展性及可維護性極差方法,代碼的可擴展性及可維護性極差 能找到這個解決方案的弊端嗎?能找到這個解決方案的弊端嗎? 19 為什么需要多態(tài) 5 第二種解決方案使用多態(tài) public class HQ3 public void judge(Teacher t) roduction(); t.giveLesson(); public static void main(String args) HQ3 hq = new HQ3(); hq.judge(n
19、ew JavaTeacher2(李明李明,北京中心北京中心“); hq.judge(new DotNetTeacher2(張明張明,天津中心天津中心); hq.judge(new DBTeacher(“李嵐李嵐,北京中心北京中心“); 可以接收子類類型可以接收子類類型 根據(jù)實際創(chuàng)建的對象根據(jù)實際創(chuàng)建的對象 類型調(diào)用相應(yīng)方法類型調(diào)用相應(yīng)方法 大家好!我是北京中心的李明大家好!我是北京中心的李明. 啟動啟動 Eclipse 知識點講解知識點講解 總結(jié)提問總結(jié)提問 大家好!我是天津中心的張明大家好!我是天津中心的張明. 啟動啟動 Visual Studio 2005 知識點講解知識點講解 總結(jié)提問總
20、結(jié)提問 大家好!我是北京中心的李嵐大家好!我是北京中心的李嵐. 啟動啟動 Sql Server 知識點講解知識點講解 總結(jié)提問總結(jié)提問 控制臺輸出控制臺輸出 使用多態(tài)之后,當(dāng)需要增加新的子類類型 時,無需更改總部類,程序的可擴展性及 可維護性增強 20 什么是多態(tài) 簡單來說,多態(tài)是具有表現(xiàn)多種形態(tài)的能 力的特征 同一個實現(xiàn)接口,使用不同的實例而執(zhí)行 不同操作 彩色打印機彩色打印機 打印機打印機 黑白打印機黑白打印機 打印效果:彩色打印效果:彩色 打印效果:黑白打印效果:黑白 打印打印 打印打印 21 public class Teacher public void giveLesson() S
21、ystem.out.println(知識點講解知識點講解); System.out.println(總結(jié)提問總結(jié)提問); public class Test public static void main(String args) HQ3 hq = new HQ3(); hq.judge(new DBTeacher(); 3 如何實現(xiàn)多態(tài) 1、子類重寫父類的方法 2、把父類型作為參數(shù),該父類及其子類對象作為參數(shù)傳入 3、運行時,根據(jù)實際創(chuàng)建的對象類型動態(tài)決定使用哪個方法 public class DBTeacher extends Teacher public void giveLesson() System.out.println(啟動啟動 SqlServer); super.giveLesson(); 1 public class HQ3 public void judge(Teacher t) t.giveLesson(); 2 22 小結(jié) 2 請編碼實現(xiàn)如下需求: 樂器(Instrument)分為:鋼琴(Piano)、小 提琴(Violin) 各種樂器的彈奏( play )方法各不相同 編寫一個測試類InstrumentTest,要求: 編寫方法testPlay,對各種樂器進行彈奏測 試。要依據(jù)樂器的不同
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承攬合同和制作協(xié)議書
- 打人被拘留私下協(xié)議書
- 道路開口協(xié)議書
- 綠植寄賣協(xié)議書
- 簽約老師協(xié)議書
- 職工殯葬協(xié)議書
- 按摩店上班合同協(xié)議書
- 廣告位補充合同協(xié)議書
- 簽約律師協(xié)議書
- 職權(quán)授權(quán)協(xié)議書
- 大規(guī)模模型蒸餾技術(shù)
- 基于AI的自動化日志分析與異常檢測
- 時序數(shù)據(jù)庫設(shè)計詳述
- FPC良率提升持續(xù)改善報告
- (完整版)產(chǎn)品質(zhì)量保證的措施
- 道路綠化養(yǎng)護投標方案(技術(shù)方案)
- 學(xué)校入股合作的協(xié)議書
- 某大學(xué)2021-2022年《2417客戶關(guān)系管理》期末考試真題及答案(共4套)
- 前程無憂mat管理能力測試題庫35題
- 電力現(xiàn)貨市場基本原理課件
- 國際公路貨物運輸合同公約cmr
評論
0/150
提交評論