




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章類的繼承和多態(tài)教學(xué)內(nèi)容Java語(yǔ)言中繼承的概念父類與子類的概念關(guān)鍵字super的用法final修飾符的用法多態(tài)的概念及其用法教學(xué)目標(biāo)理解繼承的概念及重要意義掌握子類的繼承方式掌握創(chuàng)建子類對(duì)象的方法理解子類和父類構(gòu)造方法的執(zhí)行過(guò)程理解和掌握成員變量的隱藏和成員方法的覆蓋掌握super、final關(guān)鍵字的意義及使用方法理解多態(tài)性的意義及用法4.1引例例4.1
應(yīng)用面向?qū)ο蟪绦蛟O(shè)計(jì)方法,分別設(shè)計(jì)一個(gè)動(dòng)物類、一個(gè)魚(yú)類和一個(gè)狗類。魚(yú)和狗都有身高、體重等屬性,另外還有吃飯、睡覺(jué)等行為。分析:魚(yú)和狗應(yīng)具有動(dòng)物身上的所有屬性和行為,但不同的動(dòng)物其屬性和行為又各不相同。我們可以提取所有動(dòng)物身上的共性,將其設(shè)計(jì)為一個(gè)父類(如動(dòng)物類),對(duì)于不同的動(dòng)物(如魚(yú))可以看成是父類的子類。用子類去繼承父類屬性和行為,實(shí)現(xiàn)代碼重用。如Jpro4_1.java4.2繼承繼承的概念
繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的又一個(gè)重要特性。類的繼承就是以原有類為基礎(chǔ)創(chuàng)建新類,達(dá)到代碼復(fù)用的目的。面向?qū)ο蟪绦蛟O(shè)計(jì)的繼承特性使得大型應(yīng)用程序的維護(hù)和設(shè)計(jì)變得更加簡(jiǎn)單。繼承機(jī)制提供了一種重復(fù)利用原有程序模塊資源的途徑。通過(guò)新類對(duì)原有類的繼承,可以擴(kuò)充舊的程序模塊功能以適應(yīng)新的用戶需求,從而既可以大大方便原有系統(tǒng)的擴(kuò)充,也可以大大加快新系統(tǒng)的開(kāi)發(fā)速度。4.2繼承(續(xù))4.2繼承(續(xù))2.子類與父類
繼承是一種由已有的類創(chuàng)建新類的機(jī)制。利用繼承,我們可以先創(chuàng)建一個(gè)具有公共屬性和方法的一般類,根據(jù)一般類再創(chuàng)建具有自己屬性和方法的新類。新類繼承一般類的屬性和方法,并根據(jù)需要增加自己的屬性和方法。由繼承而得到的類稱為子類或派生類,被繼承的類稱為父類或超類。子類直接的上層父類稱作直接父類,否則叫間接父類。父類直接派生的類稱為直接子類,否則叫間接子類。Java不支持多繼承,即一個(gè)子類只能有一個(gè)直接父類。4.2繼承(續(xù))例如:classA{
……}classBextendsA{
……}classCextendsB{
……}在類的聲明中,classBextendsA中的關(guān)鍵字extends表示B類繼承A類,即B類是A類的子類,C類是B類的子類。因此,A類是B類的直接父類,A類是C類的間接父類;B類稱作A類的直接子類,C類為A類的間接子類。4.2繼承(續(xù))3.子類的繼承性(1)同包中的子類和父類的繼承性如果子類和父類在同一包中,子類能繼承父類中除private修飾符修飾的成員變量和成員方法。繼承后的成員變量和成員方法的訪問(wèn)權(quán)限保持不變。例如:classA{ privatevoidpriMethod() { System.out.println("priMethod()"); } voiddefMethod() { System.out.println("defMethod()"); } protectedvoidproMethod() { System.out.println("proMethod()"); } publicvoidpubMethod() { System.out.println("pubMethod()"); }}classBextendsA{publicstaticvoidmain(Stringargs[]) { Bb=newB(); b.priMethod();//非法訪問(wèn)
b.defMethod(); Method(); b.pubMethod(); } }4.2繼承(續(xù))3.子類的繼承性(2)不同包中的子類和父類的繼承性如果子類和父類不在同一包中,那么子類只能繼承父類中用protected和public修飾符修飾的成員變量和成員方法。繼承后的成員變量和成員方法的訪問(wèn)權(quán)限保持不變。例如://文件名A.javapackagesuperclass;publicclassA{ privatevoidpriMethod() { System.out.println("priMethod()"); } voiddefMethod() { System.out.println("defMethod()");} protectedvoidproMethod() { System.out.println("proMethod()"); } publicvoidpubMethod() { System.out.println("pubMethod()"); }}//文件名B.javaimportsuperclass.A;classBextendsA{ publicstaticvoidmain(Stringargs[]) { Bb=newB(); b.priMethod();//非法訪問(wèn)
b.defMethod();//非法訪問(wèn)
Method(); b.pubMethod(); }}另外還有一種情況,當(dāng)子類對(duì)象在與B類同包中的其它類中,但該類不是A類的子類,則子類對(duì)象不能訪問(wèn)protected修飾符修飾的成員。例如://文件名B.javaimportsuperclass.A;classBextendsA{ }classC{publicstaticvoidmain(Stringargs[]) { Bb=newB(); b.priMethod();//非法訪問(wèn)
b.defMethod();//非法訪問(wèn)
Method();//非法訪問(wèn)
b.pubMethod(); }}4.2繼承(續(xù))3.子類的繼承性(3)構(gòu)造方法不能被繼承,也就是說(shuō)子類不能繼承父類的構(gòu)造方法。當(dāng)用子類的構(gòu)造方法創(chuàng)建一個(gè)子類對(duì)象時(shí),子類的構(gòu)造方法總是先調(diào)用父類的某個(gè)構(gòu)造方法。如果子類的構(gòu)造方法沒(méi)有指明使用父類的哪個(gè)構(gòu)造方法,則子類調(diào)用父類不帶參數(shù)的構(gòu)造方法。
4.3創(chuàng)建子類對(duì)象
子類對(duì)象在構(gòu)造之前,一定先構(gòu)造父類對(duì)象,并繼承父類可以被繼承的成員。子類對(duì)象與父類對(duì)象的內(nèi)存空間是獨(dú)立的,子類將父類中能夠被繼承的成員拷貝了一份,放在自己的空間中,彼此互不干擾。如例4.2。文件名Jpro4_2.java
4.3創(chuàng)建子類對(duì)象4.3創(chuàng)建子類對(duì)象
無(wú)論子類與父類是否位于同一個(gè)包中,它們還要遵循以下兩條原則:(1)成員變量的隱藏:如果子類中聲明一個(gè)與父類成員變量同名的成員變量,則子類不能繼承父類中同名的成員變量。此時(shí),稱子類成員變量隱藏了父類中的同名成員變量。(2)成員方法的覆蓋:如果子類中聲明一個(gè)與父類成員方法同名的成員方法(兩個(gè)方法的聲明部分完全相同),則子類不能繼承父類中同名的成員方法。此時(shí),稱子類成員方法覆蓋(或重寫(xiě))了父類中的同名成員方法。4.4關(guān)鍵字super
super是Java語(yǔ)言的關(guān)鍵字,用來(lái)表示父類對(duì)象。關(guān)鍵字super有兩種用法:一種是子類使用super調(diào)用父類的構(gòu)造方法,另一種是子類使用super調(diào)用父類中被隱藏的成員變量和被覆蓋的方法。
1.使用super調(diào)用父類的構(gòu)造方法子類不能繼承父類的構(gòu)造方法,因此子類如果想使用父類的構(gòu)造方法,可以使用關(guān)鍵字super,而且super必須是構(gòu)造方法中的第一條語(yǔ)句。
例如:classA{intx;A(){}A(intx){this.x=x;}
……}classB{ B() { //super();//調(diào)用父類無(wú)參構(gòu)造方法
super(5);//調(diào)用父類帶參構(gòu)造方法
…… }
……}4.4關(guān)鍵字super(續(xù))2.使用super調(diào)用父類中被隱藏的成員變量和被覆蓋的方法。如果子類中定義了與父類同名的成員變量,不管其類型是否相同,父類中的同名成員變量都要被隱藏,子類就無(wú)法繼承該變量了。當(dāng)子類中定義了一個(gè)方法,并且這個(gè)方法的聲明部分與父類的某個(gè)方法完全相同,即方法名、返回類型、參數(shù)個(gè)數(shù)、參數(shù)類型完全相同,那么父類中的這個(gè)方法將被子類的方法覆蓋。子類如果想使用父類中被隱藏的成員變量和被覆蓋的方法,必須使用關(guān)鍵字super。如例4.3文件名Jpro4_3.java4.5final修飾符1.用final修飾符定義最終類在實(shí)際應(yīng)用中,出于某種考慮,當(dāng)創(chuàng)建一個(gè)類時(shí),希望該類永不需要做任何變動(dòng),或者出于安全因素,不希望它有任何子類,這時(shí)可以使用final關(guān)鍵字。在類的定義時(shí),使用final修飾符,意味著這個(gè)類不能再作為父類派生出其他的子類,這樣的類通常稱為最終類。如:finalclassA{
……}4.5final修飾符(續(xù))2.用final修飾符定義的常量用final修飾符修飾一個(gè)變量,即定義一個(gè)常量。常量是不占內(nèi)存的,因此其值也不允許改變。3.用final修飾符定義最終方法
final修飾符也可以修飾一個(gè)方法,這樣的方法不能被覆蓋,即子類可以繼承,但不允許子類重寫(xiě)的方法,這樣的方法稱為最終方法。4.6多態(tài)性1.多態(tài)的定義與作用多態(tài)性是指同一個(gè)名字的若干方法,有著不同的實(shí)現(xiàn)(方法體中的代碼不同)。多態(tài)提供了另外一種分離接口和實(shí)現(xiàn)(即把“做什么”與“怎么做”分開(kāi))的一種尺度。換句話說(shuō)多態(tài)是在類體系中把設(shè)想(想要“做什么”)和實(shí)現(xiàn)(該“怎么做”)分開(kāi)的手段,它是從設(shè)計(jì)的角度考慮的。如果說(shuō)繼承性是系統(tǒng)的布局手段,多態(tài)性就是其功能實(shí)現(xiàn)的方法。多態(tài)性意味著某種概括的動(dòng)作可以由特定的方式來(lái)實(shí)現(xiàn),這種特定的方式取決于執(zhí)行該動(dòng)作的對(duì)象。4.6多態(tài)性(續(xù))2.方法的重載
方法的重載就是在同一個(gè)類中定義了多個(gè)同名的方法,但有著不同的形參(即形參的個(gè)數(shù)不同或形參的類型不同)。在Java中,不僅成員方法可以重載,構(gòu)造方法也可以重載。例4.4文件名Jpro4_4.java4.6多態(tài)性(續(xù))3.上轉(zhuǎn)型對(duì)象對(duì)象的向上轉(zhuǎn)型,又叫對(duì)象的動(dòng)態(tài)綁定,是指父類的對(duì)象變量可以與其子類對(duì)象進(jìn)行綁定,綁定后父類對(duì)象就叫做子類對(duì)象的上轉(zhuǎn)型對(duì)象。需要注意的是,對(duì)象不能向下轉(zhuǎn)型,即父類對(duì)象不能綁定到子類對(duì)象變量上。例如:classFather{ voidg() {
…… }}classSonextendsFather{ voidg() {
…… }}classGrandson
extendsSon{ voidg() {
…… }}classTest{
publicstaticvoidmain(Stringargs[]) { Father
a; Sonb=newSon(); a=b;//a是b的上轉(zhuǎn)型對(duì)象
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 溫柔的怪獸課件
- 檢察機(jī)關(guān)培訓(xùn)
- 雨季安全管理培訓(xùn)
- 電脫鹽工藝培訓(xùn)
- 口罩防疫知識(shí)培訓(xùn)報(bào)道課件
- 黨群服務(wù)面試題目及答案
- 2025年綠色蔬菜種子研發(fā)與推廣合作合同范本
- 2025年五星級(jí)酒店客房深度清潔與保養(yǎng)服務(wù)協(xié)議尊享版
- 2025年現(xiàn)代化學(xué)校教學(xué)樓室內(nèi)外裝飾設(shè)計(jì)與施工合同
- 2025年醫(yī)院臨床路徑標(biāo)準(zhǔn)化建設(shè)與推廣應(yīng)用合同
- 高速天橋拆除方案(3篇)
- 2025年中國(guó)冷鏈物流行業(yè)投資前景分析、未來(lái)發(fā)展趨勢(shì)研究報(bào)告(智研咨詢發(fā)布)
- 2025合作合同范本下載
- 手外傷急救診療流程標(biāo)準(zhǔn)化
- 農(nóng)村土地托管培訓(xùn)課件
- 老年專科護(hù)士學(xué)習(xí)培訓(xùn)匯報(bào)
- 基孔肯雅熱防控培訓(xùn)課件
- 公司崗位補(bǔ)助管理辦法
- 游戲與兒童發(fā)展課件
- 捐贈(zèng)助學(xué)活動(dòng)方案
- 健康體檢服務(wù)投標(biāo)方案投標(biāo)文件(技術(shù)方案)
評(píng)論
0/150
提交評(píng)論