資源描述:
《java繼承、接口與泛型》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第5章繼承、接口與泛型1.子類與父類的定義2.子類的繼承權(quán)限3.子類對象的構(gòu)造過程4.復(fù)用和多態(tài)性5.抽象類、接口6內(nèi)部類和匿名類5.1子類與父類父類可以是自己編寫的類也可以是java類庫中的類。利用繼承有利于實(shí)現(xiàn)代碼的重復(fù)使用,子類只需要添加新的功能代碼即可。Java不支持多重繼承,即子類只能有一個父類。使用關(guān)鍵字extends來聲明一個類是另外一個類的子類,格式如下:class子類名extends父類名{…..}返回5.2子類的繼承性父類與子類在同一個文件父類與子類在同一個包父類與子類在同不同包無允許允許不允許private不允許不允許
2、不允許protected允許允許允許public允許允許允許5.3子類對象的構(gòu)造過程1)父類和子類的構(gòu)造方法哪個先執(zhí)行?2)父類多個的構(gòu)造函數(shù)中那個被執(zhí)行?2)如何指定執(zhí)行父類某個特定的構(gòu)造函數(shù)?3)子類可以訪問父類的私有成員嗎?5.3子類對象的構(gòu)造過程子類對象內(nèi)存示意圖如下圖子類未繼承的成員子類未繼承的成員引用子類對象子類繼承的成員子類繼承的成員子類聲明的成員子類聲明的成員5.4成員變量的隱藏和方法的重寫1.成員變量的隱藏(覆蓋)classA{privateintx=10;voidh(){System.out.println("x="+x
3、);}}classBextendsA{privatedoublex=1.1;voidg(){floatz=x+100;System.out.printf("z=%f",z);}}publicclassExample4{publicstaticvoidmain(Stringargs[]){Bb=newB();b.g();//調(diào)用子類自己聲明的方法。b.h();}}5.4成員變量的隱藏和方法的重寫2.方法重寫1)子類中定義一個方法,并且這個方法的名字、返回類型、參數(shù)個數(shù)和類型與從父類繼承的方法完全相同。2)子類通過方法的重寫可以把父類的狀態(tài)
4、和行為改變?yōu)樽陨淼臓顟B(tài)和行為。3)如果子類還想使用被隱藏的方法,必須使用關(guān)鍵字super。5.4成員變量的隱藏和方法的重寫3.訪問修飾符protected的進(jìn)一步說明(a)子類D的protected成員變量和方法,如果不是從父類繼承來的,object訪問這些protected成員變量和方法時,只要E類和D類在同一個包中就可以了。(b)如果子類D的對象的protected成員變量或protected方法是從父類繼承的,那么就要一直追溯到該protected成員變量或方法的“祖先”類,即A類,如果E類和A類在同一個包中,object對象能訪問繼
5、承的protected變量和protected方法。返回5.5Super關(guān)鍵字Super關(guān)鍵字有兩種用法:一種用法是子類使用super調(diào)用父類的構(gòu)造方法另一種用法是子類使用super調(diào)用被子類隱藏的成員變量和方法。5.6final類和final方法final類不能被繼承,即不能有子類,如:finalclassA{…}將一個類聲明為final類一般是由于安全性考慮。因?yàn)橐坏┮粋€方法被修飾為final方法,則這個方法不能被重寫,即不允許子類通過重寫隱藏繼承的final方法。返回5.7對象的上轉(zhuǎn)型對象那么就稱對象a是子類對象b的上轉(zhuǎn)型對象,對象的
6、上轉(zhuǎn)型對象的實(shí)體是子類負(fù)責(zé)創(chuàng)建的,但上轉(zhuǎn)型對象會失去原對象的一些屬性和功能。上轉(zhuǎn)型對象具有如下特點(diǎn)(見下圖所示)。對象對象的上轉(zhuǎn)型對象繼承或隱藏的成員變量繼承或重寫的方法新增的變量新增的方法5.7對象的上轉(zhuǎn)型對象(1)上轉(zhuǎn)型對象不能操作子類聲明定義的成員變量;也不能使用子類聲明定義的方法。(2)上轉(zhuǎn)型對象可以操作子類繼承的成員變量和隱藏的成員變量,也可以使用子類繼承的或重寫的方法。(3)上轉(zhuǎn)型對象不能操作子類新增的方法和成員變量(4)可以將對象的上轉(zhuǎn)型對象再強(qiáng)制轉(zhuǎn)換到一個子類對象,這時,該子類對象又具備了子類所有屬性和功能5.8繼承與多態(tài)當(dāng)
7、一個類有很多子類時,并且這些子類都重寫了父類中的某個方法。當(dāng)我們把子類創(chuàng)建的對象的引用放到一個父類的對象中時,就得到了該對象的一個上轉(zhuǎn)型對象,那么這個上轉(zhuǎn)型對象在調(diào)用這個方法時就可能具有多種形態(tài)。5.9使用abstract類用關(guān)鍵字abstract修飾類稱為abstract類(抽象類)。如:abstractclassA{……}1)abstract類不能用new運(yùn)算符創(chuàng)建對象,必須產(chǎn)生其子類,由子類創(chuàng)建對象。2)若abstract類的類體中有abstract方法,只允許聲明,而不允許實(shí)現(xiàn),而該類的子類必須實(shí)現(xiàn)abstract方法,即重寫父類的
8、abstract方法。3)一個abstract類只關(guān)心子類是否具有某種功能5.9使用abstract類現(xiàn)在讓我們來分析一下上面的例子,在這個例子中,我們用到了abstract類和