版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
繼承與多態(tài)學(xué)完本次課程后,你能夠:實(shí)現(xiàn)方法重寫了解Object類會(huì)使用重寫實(shí)現(xiàn)多態(tài)機(jī)制會(huì)使用instanceof運(yùn)算符會(huì)使用向上轉(zhuǎn)型會(huì)使用向下轉(zhuǎn)型本課目標(biāo)方法的重寫或方法的覆蓋(overriding)子類根據(jù)需求對(duì)從父類繼承的方法進(jìn)行重新編寫重寫時(shí),可以用super.方法的方式來(lái)保留父類的方法構(gòu)造方法不能被重寫什么是方法重寫方法重寫的規(guī)則方法名相同參數(shù)列表相同返回值類型相同或者是其子類訪問(wèn)權(quán)限不能嚴(yán)于父類父類的靜態(tài)方法不能被子類覆蓋為非靜態(tài)方法,父類 的非靜態(tài)方法不能被子類覆蓋為靜態(tài)方法父類的私有方法不能被子類覆蓋不能拋出比父類方法更多的異常方法重寫規(guī)則比較項(xiàng)位置方法名參數(shù)表返回值訪問(wèn)修飾符方法重寫子類相同相同相同或是其子類不能比父類更嚴(yán)格方法重載同類相同不相同無(wú)關(guān)無(wú)關(guān)方法重寫與方法重載有何區(qū)別?方法重寫vs方法重載Object類是所有類的父類Object類public
class
Pet
extends
Object
{……}方法說(shuō)明toString()返回當(dāng)前對(duì)象本身的有關(guān)信息,按字符串對(duì)象返回equals()比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象,是則返回truehashCode()返回該對(duì)象的哈希代碼值getClass()獲取當(dāng)前對(duì)象所屬的類信息,返回Class對(duì)象Object類被子類經(jīng)常重寫的方法Object類Object類的equals()方法比較兩個(gè)對(duì)象是否是同一個(gè)對(duì)象,是則返回true操作符==簡(jiǎn)單數(shù)據(jù)類型,直接比較值。如1==2引用類型,比較兩者是否為同一對(duì)象Object類演示示例:重寫equals()Object類的equals()方法與==沒(méi)區(qū)別當(dāng)有特殊需求,如認(rèn)為屬性相同即為同一對(duì)象時(shí),需要重寫equals()Java.lang.String重寫了equals()方法,把equals()方法的判斷變?yōu)榱伺袛嗥渲嫡n堂練習(xí)需求說(shuō)明重寫比較規(guī)則,判斷兩名學(xué)員(Student)是否為同一 對(duì)象Student相關(guān)屬性:Id(學(xué)號(hào))、name(姓名)、age(年齡)如果兩名學(xué)員的學(xué)號(hào)以及姓名相同,則為同一對(duì)象instanceof用于判斷一個(gè)引用類型所引用的對(duì)象是否是一個(gè)類的實(shí)例//給企鵝看病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("打針、吃藥");}}為什么使用多態(tài)如下主人類中給寵物看病的方法,如果又需要給XXX寵物看病,怎么辦?為什么使用多態(tài)頻繁修改代碼,代碼可擴(kuò)展性、可維護(hù)性差。使用多態(tài)優(yōu)化分析添加X(jué)XX類,繼承Pet類修改主人類,添加給XXX看病的方法演示示例:為寵物看病生活中的多態(tài)不同類型的打印機(jī)打印效果不同程序中的多態(tài)多態(tài):同一個(gè)引用類型,使用不同的實(shí)例而執(zhí)行不同操作什么是多態(tài)黑白打印機(jī)打印機(jī)彩色打印機(jī)同一種事物,由于條件不同,產(chǎn)生的結(jié)果也不同多態(tài)的使用-1使用多態(tài)優(yōu)化后的代碼Pet
pet
=
new
Dog();Master
master
=
new
Master();master.cure(pet);…
…public
class
Master
{public
void
cure(Pet
pet)
{if
(pet.getHealth()
<
50)pet.toHospital();}}1Dog類public
class
Dog
extends
Pet
{public
void
toHospital()
{this.setHealth(60);System.out.println("打針、吃藥");}}2Penguin類public
class
Penguin
extends
Pet
{public
void
toHospital()
{this.setHealth(70);System.out.println("吃藥、療養(yǎng)");}}34主人類測(cè)試方法…
…父類引用、子類對(duì)象又要給XXX看病時(shí),只需:編寫XXX類繼承Pet類(舊方案也需要)創(chuàng)建XXX類對(duì)象(舊方案也需要)其他代碼不變(不用修改Master類)方法重寫是實(shí)現(xiàn)多態(tài)的基礎(chǔ)多態(tài)的使用-2演示示例:使用多態(tài)為寵物看病Pet類的toHospital()如何實(shí)現(xiàn)呢?toHospital()不需要有具體的實(shí)現(xiàn)抽象方法Pet類聲明為抽象類實(shí)例化Pet毫無(wú)意義public
abstract
class
Pet
{}多態(tài)的使用-3抽象方法public
abstract
void
print();每個(gè)子類的實(shí)現(xiàn)不同抽象方法問(wèn)題以下代碼有什么問(wèn)題?public
abstract
class
Pet
{public
void
toHospital()
{}}抽象方法沒(méi)有方法體抽象方法必須在抽象類里抽象方法必須在子類中被實(shí)現(xiàn),除非子類是抽象類演示示例:將Pet修改為抽象類向上轉(zhuǎn)型觀察如下代碼//測(cè)試方法向上轉(zhuǎn)型:父類的引用指向子類對(duì)象。自動(dòng)進(jìn)行類型轉(zhuǎn)換Pet
pet
=
new
Dog();pet.setHealth(20);Master
master
=
new
Master();master.cure(pet);注意<父類型><引用變量名>=new<子類型>();此時(shí)通過(guò)父類引用變量調(diào)用的方法是子類覆蓋或繼承 父類的方法,不是父類的方法此時(shí)通過(guò)父類引用變量無(wú)法調(diào)用子類特有的方法向下轉(zhuǎn)型如果需要調(diào)用子類特有的方法,怎么辦?向下轉(zhuǎn)型:將一個(gè)指向子類對(duì)象的父類引用賦給一個(gè)子類的引用,即:父類類型轉(zhuǎn)換為子類類型。需強(qiáng)制類型轉(zhuǎn)換Dog
dog=(Dog)pet;//將pet
轉(zhuǎn)換為Dog類型dog.catchingFlyDisc();//執(zhí)行Dog特有的方法注意<子類型><引用變量名>=(<子類型>)<父類型的引用 變量>;在向下轉(zhuǎn)型的過(guò)程中,如果沒(méi)有轉(zhuǎn)換為真實(shí)子類類型, 會(huì)出現(xiàn)類型轉(zhuǎn)換異常演示示例:向下轉(zhuǎn)型如何減少在向下轉(zhuǎn)型的過(guò)程中,沒(méi)有轉(zhuǎn)換為真實(shí)子類類型的類型轉(zhuǎn)換異常?Java中提供了instanceof運(yùn)算符來(lái)進(jìn)行類型的判斷注意使用instanceof時(shí),對(duì)象的類型必須和instanceof后 面的參數(shù)所指定的類在繼承上有上下級(jí)關(guān)系instanceof多態(tài)的應(yīng)用回顧之前代碼中的主人類(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)的主要方式使用父類作為方法的返回值,也是Java中實(shí)現(xiàn)和使用多態(tài)的主
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院入住老人遺愿實(shí)施與尊重制度
- 企業(yè)危廢管理制度
- 會(huì)議后續(xù)跟蹤與效果評(píng)估制度
- 2026年公務(wù)員面試備考專項(xiàng)練習(xí)題
- 2026年漢語(yǔ)言文學(xué)研究生入學(xué)試題及經(jīng)典文選分析
- 2026年新版膽管造口合同
- 山西省陽(yáng)泉市2025~2026學(xué)年度第一學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)高二語(yǔ)文試題及參考答案
- 道路施工單位臨時(shí)用電安全隱患排查制度
- 福建省龍巖市2025-2026學(xué)年高一第一學(xué)期2月期末英語(yǔ)試題(含答案含聽力原文無(wú)音頻)
- 2025年靈壽縣招教考試備考題庫(kù)附答案解析(奪冠)
- 2026國(guó)家國(guó)防科技工業(yè)局所屬事業(yè)單位第一批招聘62人備考題庫(kù)及答案詳解一套
- 2026年湖南工業(yè)職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試備考題庫(kù)含答案解析
- 2026年益陽(yáng)醫(yī)學(xué)高等??茖W(xué)校單招職業(yè)技能筆試參考題庫(kù)含答案解析
- 中央經(jīng)濟(jì)工作會(huì)議解讀:職業(yè)教育發(fā)展強(qiáng)化
- 兒科肺炎的常見并發(fā)癥及護(hù)理措施
- 貴州省遵義市2023-2024學(xué)年七年級(jí)上學(xué)期期末英語(yǔ)試題(含答案)
- 2026年各地名校高三語(yǔ)文聯(lián)考試題匯編之語(yǔ)言文字運(yùn)用含答案
- 2025 AHA心肺復(fù)蘇與心血管急救指南
- 2026年九江職業(yè)大學(xué)單招職業(yè)適應(yīng)性測(cè)試題庫(kù)帶答案詳解
- 護(hù)理細(xì)節(jié)血流動(dòng)力學(xué)
- 露天礦山安全教育培訓(xùn)
評(píng)論
0/150
提交評(píng)論