第4章-類的多態(tài)_第1頁
第4章-類的多態(tài)_第2頁
第4章-類的多態(tài)_第3頁
第4章-類的多態(tài)_第4頁
第4章-類的多態(tài)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章類的多態(tài)掌握多態(tài)的優(yōu)勢和應用場合掌握父類和子類之間的類型轉換掌握instanceof運算符的使用使用父類作為方法形參實現(xiàn)多態(tài)本章目標為什么使用多態(tài)5-1寵物生病了,需要主人給寵物看病不同寵物看病過程不一樣不同寵物恢復后體力值不一樣

打針

吃藥

吃藥

療養(yǎng)狗狗Q仔為什么使用多態(tài)5-2編寫主人類編寫給狗狗看病的方法編寫給Q仔看病的方法編寫測試方法調用主人類給狗狗看病的方法調用主人類給Q仔看病的方法為什么使用多態(tài)5-3編碼實現(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)化設計頻繁修改代碼,代碼可擴展性、可維護性差為什么使用多態(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):同一個引用類型,使用不同的實例而執(zhí)行不同操作父類引用,子類對象同一種事物,由于條件不同,產生的結果也不同如何實現(xiàn)多態(tài)3-1用多態(tài)實現(xiàn)打印機分為黑白打印機和彩色打印機不同類型的打印機打印效果不同黑白打印機彩色打印機打印如何實現(xiàn)多態(tài)3-2使用多態(tài)實現(xiàn)思路編寫父類編寫子類,子類重寫父類方法運行時,使用父類的類型,子類的對象計算機可以連接各種打印機無論連接何種打印機打印方法都相同根據連接打印機不同,效果也不同如何實現(xiàn)多態(tài)3-3編碼實現(xiàn)實現(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();}父類子類運行同一種操作方式,不同的操作對象只能調用父類已經定義的方法方法重寫方法重寫的規(guī)則在繼承關系的子類中重寫的方法名、參數(shù)、返回值類型必須與父類相同私有方法不能繼承因而也無法重寫

位置方法名參數(shù)表返回值訪問修飾符方法重寫子類相同相同相同不能比父類更嚴格方法重載同類相同不相同無關無關方法重寫方法重載VSinstanceof運算符該運算符用來判斷一個對象是否屬于一個類或者實現(xiàn)了一個接口,結果為true或false在強制類型轉換之前通過instanceof運算符檢查對象的真實類型,可以避免類型轉換異常,從而提高代碼健壯性對象instanceof

類或接口/***測試instanceof運算符的使用。*@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();}}}指導——實現(xiàn)喂養(yǎng)寵物功能2-1訓練要點:子類到父類的自動類型轉換使用父類作為方法形參實現(xiàn)多態(tài)多態(tài)可以減少代碼量,可以提高代碼的可擴展性和可維護性需求說明:實現(xiàn)喂養(yǎng)寵物功能不同寵物吃的東西不同主人可以喂養(yǎng)不同類型寵物講解需求說明指導——實現(xiàn)喂養(yǎng)寵物功能2-2實現(xiàn)思路:在Pet類添加吃飯的抽象方法子類實現(xiàn)吃飯方法Master類編寫喂養(yǎng)方法,使用Pet類型作為參數(shù)運行時,調用喂養(yǎng)方法時,傳遞一個子類的對象publicclassPet{protectedabstractvoideat();}publicPetfeed(Petpet){pet.eat();}publicclassDogextendsPet{publicvoideat(){super.health=super.health+3;}}Pet類Dog類Master類完成時間:25分鐘練習——實現(xiàn)與寵物玩耍功能需求說明:主人和狗狗玩接飛盤游戲,狗狗健康值減少10,與主人親密度增加5主人和企鵝玩游泳游戲,企鵝健康值減少10,與主人親密度增加5提示:Dog類添加catchingFlyDisc()方法,實現(xiàn)接飛盤功能Penguin類添加swimming()方法,實現(xiàn)游泳功能主人添加play(Petpet)方法如果pet代表Dog就玩接飛盤游戲如果pet代表Penguin就玩游泳游戲完成時間:25分鐘小結什么是多態(tài)?使用的多態(tài)有什么好處?指導——計算總租金2-1訓練要點:多態(tài)的使用使用父類類型作為方法參數(shù)需求說明:在前面汽車租賃系統(tǒng)的基礎上,實現(xiàn)計算多種車輛總租金的功能現(xiàn)在有客戶租用:2輛寶馬1輛別克商務艙1輛金龍(34)座租5天共多少租金?講解需求說明指導——計算總租金2-2實現(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)調用CalcRent方法,計算總租金小結為什么可以實現(xiàn)這樣的效果?再次理解什么是多態(tài)?再次理解多態(tài)有什么好處?指導——購置

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論