版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章類的多態(tài)掌握多態(tài)的優(yōu)勢和應(yīng)用場合掌握父類和子類之間的類型轉(zhuǎn)換掌握instanceof運(yùn)算符的使用使用父類作為方法形參實(shí)現(xiàn)多態(tài)本章目標(biāo)為什么使用多態(tài)5-1寵物生病了,需要主人給寵物看病不同寵物看病過程不一樣不同寵物恢復(fù)后體力值不一樣
打針
吃藥
吃藥
療養(yǎng)狗狗Q仔為什么使用多態(tài)5-2編寫主人類編寫給狗狗看病的方法編寫給Q仔看病的方法編寫測試方法調(diào)用主人類給狗狗看病的方法調(diào)用主人類給Q仔看病的方法為什么使用多態(tài)5-3編碼實(shí)現(xiàn)publicclassMaster{publicvoidCure(Dogdog){if(dog.getHealth()<50){dog.setHealth(60);System.out.println("打針、吃藥");
}
}
publicvoidCure(Penguinpenguin){
if(penguin.getHealth()<50)
penguin.setHealth(70);
System.out.println("吃藥、療養(yǎng)");
}}
主人類……Mastermaster=newMaster();master.Cure(dog);master.Cure(penguin);……測試方法為什么使用多態(tài)5-4如果又需要給XXX看病,怎么辦?添加XXX類,繼承Pet類修改Master類,添加給XXX看病的方法使用多態(tài)優(yōu)化設(shè)計頻繁修改代碼,代碼可擴(kuò)展性、可維護(hù)性差為什么使用多態(tài)5-5使用多態(tài)優(yōu)化后的代碼……Petpet=newDog();Mastermaster=newMaster();master.Cure(pet);……測試方法publicclassDogextendsPet{publicvoidtoHospital(){this.setHealth(60);System.out.println("打針、吃藥");
}}publicclassPenguinextendsPet{publicvoidtoHospital(){this.setHealth(70);System.out.println("吃藥、療養(yǎng)");
}}publicclassMaster{publicvoidCure(Petpet){if(pet.getHealth()<50)pet.toHospital();}}主人類Dog類Penguin類1234又要給XXX看病時,只需:1.編寫XXX類繼承Pet類(舊方案也需要)2.創(chuàng)建XXX類對象(舊方案也需要)3.其他代碼不變(不用修改Master類)什么是多態(tài)生活中的多態(tài)你能列舉出一個多態(tài)的生活示例嗎?程序中的多態(tài)多態(tài):同一個引用類型,使用不同的實(shí)例而執(zhí)行不同操作父類引用,子類對象同一種事物,由于條件不同,產(chǎn)生的結(jié)果也不同如何實(shí)現(xiàn)多態(tài)3-1用多態(tài)實(shí)現(xiàn)打印機(jī)分為黑白打印機(jī)和彩色打印機(jī)不同類型的打印機(jī)打印效果不同黑白打印機(jī)彩色打印機(jī)打印如何實(shí)現(xiàn)多態(tài)3-2使用多態(tài)實(shí)現(xiàn)思路編寫父類編寫子類,子類重寫父類方法運(yùn)行時,使用父類的類型,子類的對象計算機(jī)可以連接各種打印機(jī)無論連接何種打印機(jī)打印方法都相同根據(jù)連接打印機(jī)不同,效果也不同如何實(shí)現(xiàn)多態(tài)3-3編碼實(shí)現(xiàn)實(shí)現(xiàn)多態(tài)的兩個要素:1.方法重寫2.使用父類類型abstractclassPrinter(){
print(Stringstr);}classColorPrinterextendsPrinter(){
print(Stringstr){System.out.println("輸出彩色的"+str);}}classBlackPrinterextendsPrinter(){
print(Stringstr){System.out.println("輸出黑白的"+str);}}publicstaticvoidmain(String[]args){
Printerp=newColorPrinter();p.print();p=newBlackPrinter();p.print();}父類子類運(yùn)行同一種操作方式,不同的操作對象只能調(diào)用父類已經(jīng)定義的方法方法重寫方法重寫的規(guī)則在繼承關(guān)系的子類中重寫的方法名、參數(shù)、返回值類型必須與父類相同私有方法不能繼承因而也無法重寫
位置方法名參數(shù)表返回值訪問修飾符方法重寫子類相同相同相同不能比父類更嚴(yán)格方法重載同類相同不相同無關(guān)無關(guān)方法重寫方法重載VSinstanceof運(yùn)算符該運(yùn)算符用來判斷一個對象是否屬于一個類或者實(shí)現(xiàn)了一個接口,結(jié)果為true或false在強(qiáng)制類型轉(zhuǎn)換之前通過instanceof運(yùn)算符檢查對象的真實(shí)類型,可以避免類型轉(zhuǎn)換異常,從而提高代碼健壯性對象instanceof
類或接口/***測試instanceof運(yùn)算符的使用。*@author北大青鳥*/publicclassTestPoly2{publicstaticvoidmain(String[]args){Petpet=newPenguin("楠楠","Q妹");
//Petpet=newDog("歐歐","雪娜瑞");
pet.eat();
if(petinstanceofDog){
Dogdog=(Dog)pet;
dog.catchingFlyDisc();
}elseif(petinstanceofPenguin){
Penguinpgn=(Penguin)pet;
pgn.swimming();
}
}}publicclassTestPoly2{publicstaticvoidmain(String[]args){//Petpet=newPenguin("楠楠","Q妹");
Petpet=newDog("歐歐","雪娜瑞");
pet.eat();
if(petinstanceofDog){Dogdog=(Dog)pet;dog.catchingFlyDisc();}elseif(petinstanceofPenguin){Penguinpgn=(Penguin)pet;pgn.swimming();}}}指導(dǎo)——實(shí)現(xiàn)喂養(yǎng)寵物功能2-1訓(xùn)練要點(diǎn):子類到父類的自動類型轉(zhuǎn)換使用父類作為方法形參實(shí)現(xiàn)多態(tài)多態(tài)可以減少代碼量,可以提高代碼的可擴(kuò)展性和可維護(hù)性需求說明:實(shí)現(xiàn)喂養(yǎng)寵物功能不同寵物吃的東西不同主人可以喂養(yǎng)不同類型寵物講解需求說明指導(dǎo)——實(shí)現(xiàn)喂養(yǎng)寵物功能2-2實(shí)現(xiàn)思路:在Pet類添加吃飯的抽象方法子類實(shí)現(xiàn)吃飯方法Master類編寫喂養(yǎng)方法,使用Pet類型作為參數(shù)運(yùn)行時,調(diào)用喂養(yǎng)方法時,傳遞一個子類的對象publicclassPet{protectedabstractvoideat();}publicPetfeed(Petpet){pet.eat();}publicclassDogextendsPet{publicvoideat(){super.health=super.health+3;}}Pet類Dog類Master類完成時間:25分鐘練習(xí)——實(shí)現(xiàn)與寵物玩耍功能需求說明:主人和狗狗玩接飛盤游戲,狗狗健康值減少10,與主人親密度增加5主人和企鵝玩游泳游戲,企鵝健康值減少10,與主人親密度增加5提示:Dog類添加catchingFlyDisc()方法,實(shí)現(xiàn)接飛盤功能Penguin類添加swimming()方法,實(shí)現(xiàn)游泳功能主人添加play(Petpet)方法如果pet代表Dog就玩接飛盤游戲如果pet代表Penguin就玩游泳游戲完成時間:25分鐘小結(jié)什么是多態(tài)?使用的多態(tài)有什么好處?指導(dǎo)——計算總租金2-1訓(xùn)練要點(diǎn):多態(tài)的使用使用父類類型作為方法參數(shù)需求說明:在前面汽車租賃系統(tǒng)的基礎(chǔ)上,實(shí)現(xiàn)計算多種車輛總租金的功能現(xiàn)在有客戶租用:2輛寶馬1輛別克商務(wù)艙1輛金龍(34)座租5天共多少租金?講解需求說明指導(dǎo)——計算總租金2-2實(shí)現(xiàn)思路:完成時間:35分鐘MotoVehile[]motos=newMotoVehile[4];motos[0]=newCar("寶馬550i","京NY28588");motos[1]=newCar("寶馬550i","京NNN328");motos[2]=newCar("別克林蔭大道","京NY28588");motos[3]=newBus("金龍",34);1、創(chuàng)建車的對象,放在數(shù)組中CalcTotalRent(MotoVehile[]motos){doubletotalRent=0.0D;for(inti=0;i<motos.length;++i){totalRent+=motos[i].CalRent(5);}returntotalRent;}2、循環(huán)調(diào)用CalcRent方法,計算總租金小結(jié)為什么可以實(shí)現(xiàn)這樣的效果?再次理解什么是多態(tài)?再次理解多態(tài)有什么好處?指導(dǎo)——購置
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025重慶大學(xué)輸變電裝備技術(shù)全國重點(diǎn)實(shí)驗(yàn)室勞務(wù)派遣項(xiàng)目研究人員招聘(長期有效)筆試重點(diǎn)試題及答案解析
- 2025年農(nóng)產(chǎn)品跨境電商供應(yīng)鏈平臺構(gòu)建與技術(shù)創(chuàng)新可行性分析報告
- 2025福建醫(yī)科大學(xué)安全保衛(wèi)工作人員招聘2人(十四)考試核心試題及答案解析
- 2025山東陽昇甄選產(chǎn)業(yè)運(yùn)營有限公司選聘7人考試重點(diǎn)題庫及答案解析
- 2025年共享經(jīng)濟(jì)平臺商業(yè)模式創(chuàng)新報告
- 2026天津市和平區(qū)事業(yè)單位招聘38人考試核心題庫及答案解析
- 2025重慶市銅梁區(qū)虎峰鎮(zhèn)人民政府公益性崗位招聘2人備考核心題庫及答案解析
- 武勝縣嘉陵水利集團(tuán)有限公司公開招聘3名工作人員考試核心題庫及答案解析
- 2025西安市浐灞第一幼兒園招聘出納備考核心題庫及答案解析
- 2025重慶市長壽區(qū)城市管理服務(wù)中心招聘數(shù)字城管工作人員3人考試重點(diǎn)試題及答案解析
- FZ/T 92023-2017棉紡環(huán)錠細(xì)紗錠子
- 現(xiàn)代詩的寫作課件
- 采氣工程課件
- 非洲豬瘟實(shí)驗(yàn)室診斷電子教案課件
- 工時的記錄表
- 金屬材料與熱處理全套ppt課件完整版教程
- 廣州市城市規(guī)劃管理技術(shù)標(biāo)準(zhǔn)與準(zhǔn)則(用地篇)
- 熱拌瀝青混合料路面施工機(jī)械配置計算(含表格)
- 水利施工CB常用表格
- 心肺復(fù)蘇后昏迷患者預(yù)后評估
- DN800主給水管道下穿鐵路施工方案
評論
0/150
提交評論