博學(xué)實(shí)訓(xùn)軟件工程JAVA面向?qū)ο蟮?章-繼承和多態(tài).pptx_第1頁
博學(xué)實(shí)訓(xùn)軟件工程JAVA面向?qū)ο蟮?章-繼承和多態(tài).pptx_第2頁
博學(xué)實(shí)訓(xùn)軟件工程JAVA面向?qū)ο蟮?章-繼承和多態(tài).pptx_第3頁
博學(xué)實(shí)訓(xùn)軟件工程JAVA面向?qū)ο蟮?章-繼承和多態(tài).pptx_第4頁
博學(xué)實(shí)訓(xùn)軟件工程JAVA面向?qū)ο蟮?章-繼承和多態(tài).pptx_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、國(guó)家信息化人才培養(yǎng)工程(深圳博學(xué))授權(quán)實(shí)訓(xùn)基地,第二章繼承和多態(tài),預(yù)習(xí)檢查,如何繼承一個(gè)類? 使用繼承有什么好處? 使用多態(tài)有什么好處?,提問,本章任務(wù),任務(wù)1:使用繼承實(shí)現(xiàn)寵物類圖結(jié)構(gòu) 任務(wù)2:子類重寫父類方法 任務(wù)3:使用super調(diào)用父類成員 任務(wù)4:使用多態(tài)實(shí)現(xiàn)寵物看病 任務(wù)5:使用父類作為方法返回值,掌握繼承的實(shí)現(xiàn),方法重寫,多態(tài)的應(yīng)用,本章目標(biāo),點(diǎn)重,點(diǎn)難,向上轉(zhuǎn)型和向下轉(zhuǎn)型,點(diǎn)難,點(diǎn)重,串講:繼承,說一說如下兩個(gè)類有什么問題?如何優(yōu)化?,提問,使用繼承優(yōu)化設(shè)計(jì),將重復(fù)代碼抽取到父類中,串講:繼承,使用繼承修改后,分析,子類與父類是is-a關(guān)系,減少代碼量,方便修改代碼,串講:繼承

2、,使用繼承 編寫父類 編寫子類,繼承父類,訪問修飾符 class Pet /公共的屬性和方法 ,訪問修飾符 class Dog extends Pet /子類特有的屬性和方法 ,繼承關(guān)鍵字,繼承是Java中實(shí)現(xiàn)代碼重用的重要手段之一。Java中只支持單根繼承,即一個(gè)類只能有一個(gè)直接父類,講解:方法重寫,重寫方法和被重寫方法必須具有相同的方法名和參數(shù)列表 重寫方法的返回值類型必須和被重寫方法的返回值類型相同或者是其子類 重寫方法的不能縮小被重寫方法的訪問權(quán)限,子類重寫父類方法即可(方法重寫:在子類中根據(jù)需求對(duì)從父類繼承的方法進(jìn)行重新編寫),上機(jī)中,Dog或Penguin的print()需要和Pe

3、t中的print()有不同的實(shí)現(xiàn),怎么辦?,提問,注意,小結(jié),方法重寫與方法重載有什么區(qū)別?,提問,串講:super關(guān)鍵字,訪問父類構(gòu)造方法 訪問父類屬性或方法,super (參數(shù));,super代表父類對(duì)象,super關(guān)鍵字和this關(guān)鍵字的作用類似,都是將被屏蔽了的成員變量、成員方法變?yōu)榭梢娍捎?。super用在子類中,訪問直接父類中的被屏蔽的內(nèi)容,進(jìn)一步提高代碼的重用性和靈活性。super關(guān)鍵字不僅可以訪問父類的構(gòu)造方法,還可以訪問父類的成員,包括父類的屬性、一般方法等,無法通過super訪問private成員,super.屬性名/方法名();,上機(jī)中,Dog或Penguin如何訪問Pet

4、的成員?,提問,串講:繼承時(shí)構(gòu)造方法調(diào)用順序,串講:Object類,Object類是所有類的父類 Object類被子類經(jīng)常重寫的方法,演示示例:重寫equals(),小結(jié),提問,class A public A() System.out.println(父類的構(gòu)造方法); public class B extends A public B() System.out.println(子類的構(gòu)造方法); public static void main(String args) B b=new B(); ,控制臺(tái)輸出什么?,常見錯(cuò)誤集中講解,串講:多態(tài),如下主人類中給寵物看病的方法,如果又需要給XX

5、X寵物看病,怎么辦?,提問,添加XXX類,繼承Pet類 修改主人類,添加給XXX看病的方法,/給企鵝看病 public void cure(Penguin penguin) if (penguin.getHealth() 50) penguin.setHealth(70); System.out.println(吃藥、療養(yǎng)); ,/給狗看病 public void cure(Dog dog) if (dog.getHealth() 50) dog.setHealth(60); System.out.println(打針、吃藥); ,頻繁修改代碼,代碼可擴(kuò)展性、可維護(hù)性差。使用多態(tài)優(yōu)化,串講:多

6、態(tài),使用多態(tài)優(yōu)化后的代碼, Pet pet = new Dog(); Master master = new Master(); master.cure(pet); ,public class Dog extends Pet public void toHospital() this.setHealth(60); System.out.println(打針、吃藥); ,public class Penguin extends Pet public void toHospital() this.setHealth(70); System.out.println(吃藥、療養(yǎng)); ,public c

7、lass Master public void cure(Pet pet) if (pet.getHealth() 50) pet.toHospital(); ,1,2,3,4,Dog類,主人類,Penguin類,測(cè)試方法,又要給XXX看病時(shí),只需: 1. 編寫XXX類繼承Pet類(舊方案也需要) 2. 創(chuàng)建XXX類對(duì)象(舊方案也需要) 3. 其他代碼不變(不用修改Master類) 多態(tài):同一個(gè)引用類型,使用不同的實(shí)例而執(zhí)行不同操作。方法重寫是實(shí)現(xiàn)多態(tài)的基礎(chǔ),提示: 父類Pet可以聲明為抽象類;toHospital()可以聲明為抽象方法,講解:向上轉(zhuǎn)型,上機(jī)中的主人類(Master) = ne

8、w (); 此時(shí)通過父類引用變量調(diào)用的方法是子類覆蓋或繼承父類的方法,不是父類的方法 此時(shí)通過父類引用變量無法調(diào)用子類特有的方法,/測(cè)試方法 Pet pet = new Dog(); pet.setHealth(20); Master master = new Master(); master.cure(pet);,向上轉(zhuǎn)型:父類的引用指向子類對(duì)象。自動(dòng)進(jìn)行類型轉(zhuǎn)換,分析,注意,串講:向下轉(zhuǎn)型, = ( ); 在向下轉(zhuǎn)型的過程中,如果沒有轉(zhuǎn)換為真實(shí)子類類型,會(huì)出現(xiàn)類型轉(zhuǎn)換異常,Dog dog=(Dog)pet;/將pet 轉(zhuǎn)換為Dog類型 dog. catchingFlyDisc();/執(zhí)行D

9、og特有的方法,向上轉(zhuǎn)型后,將無法調(diào)用子類特有的方法。如果需要調(diào)用子類特有的方法,怎么辦?,提問,向下轉(zhuǎn)型:將一個(gè)指向子類對(duì)象的父類引用賦給一個(gè)子類的引用,即:父類類型轉(zhuǎn)換為子類類型。需強(qiáng)制類型轉(zhuǎn)換,注意,講解:instanceof,使用instanceof時(shí),對(duì)象的類型必須和instanceof后面的參數(shù)所指定的類在繼承上有上下級(jí)關(guān)系,如何減少在向下轉(zhuǎn)型的過程中,沒有轉(zhuǎn)換為真實(shí)子類類型的類型轉(zhuǎn)換異常?,提問,注意,Java中提供了instanceof運(yùn)算符來進(jìn)行類型的判斷,演示示例:instanceof的使用,串講:多態(tài)的應(yīng)用,上機(jī)中的主人類(Master),/測(cè)試方法 Pet pet = new Dog(); pet.setHealth(20); Master master = new Master(); master.cure(pet);,/為寵物看病 public void cure(Pet pet) if (pet.getHealth() 50) pet.toHospital(); ,使用父類作為方法的形參,是Java中實(shí)現(xiàn)和使用多態(tài)的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論