繼承與多態(tài)課件_第1頁
繼承與多態(tài)課件_第2頁
繼承與多態(tài)課件_第3頁
繼承與多態(tài)課件_第4頁
繼承與多態(tài)課件_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章繼承與多態(tài)lava

夕5.1繼承簡介

夕5.2繼承與子類

^5.3關(guān)鍵字super

小5.4方法覆蓋

^5.5關(guān)鍵字final

,5.6對象類型轉(zhuǎn)換

第5章繼承與多態(tài)(續(xù))

年5.7多態(tài)與動態(tài)綁定

斤5.8抽象類和抽象方法

田5.9接口

夕5.10內(nèi)部類

^5.11習(xí)題

5.1繼承簡介

5.1繼承簡介(續(xù))H

-繼承是從一個類派生出一個新類的過程。

團(tuán)通過繼承,可以讓一個類擁有另一個類的

全部屬性,也即讓一個類繼承另一個類的

全部屬性。

因派生出來的新類稱為子類(也稱派生類或

次類);而被繼承的類稱作父類(也稱基

類或超類)。

5.1繼承簡介(續(xù))

-單重繼承是指從一個父類派生出一個子類的過

程,而多重繼承是指從一個以上的父類派生出

一個子類的過程。

團(tuán)Java語言僅支持單重繼承,其多重繼承只能通

過接口等間接實現(xiàn)。

5.2繼承與子類

,521繼承的語法

*5.2.2關(guān)鍵字protected

-5.2.3子類的構(gòu)造方法

5.2.1繼承的語法

class子類名extends父類名

定義子類新成員

例5」繼承

源代碼編譯運行

5.2.2關(guān)鍵字protectedlava

,具有protected訪問權(quán)限的成員能被其子

類和同一包中的任何類訪問。

例5-2修飾符protected

源代碼

5.2.3子類的構(gòu)造方法

因子類不能繼承父類的構(gòu)造方法。因此,創(chuàng)建子

類對象時,為了初始化從父類中繼承來的數(shù)據(jù)

成員,系統(tǒng)需要調(diào)用其父類構(gòu)造方法。

例5-3默認(rèn)構(gòu)造方法

源代碼編譯運行

例5-4調(diào)用父類的構(gòu)造方法

源代碼編譯運行

5.3關(guān)鍵字super

,關(guān)鍵字super連接的是當(dāng)前子類對象中

的父類子對象。

-關(guān)鍵字super可用來調(diào)用父類構(gòu)造方法。

-關(guān)鍵字super可用來在子類中訪問從父類

繼承來的數(shù)據(jù)成員和方法。

例5-5關(guān)鍵字super

源代碼編譯運行

5.4方法覆蓋

卡方法覆蓋時,必須注意子類中的方法

應(yīng)該與父類中被覆蓋的方法有相同的

方法名、返回類型和參數(shù)列表。

后私有方法不能覆蓋。

它方法覆蓋時,不能降低其訪問權(quán)限。

例5-6方法覆蓋

源代碼編譯運行

5.5關(guān)鍵字final

,5.5.1final變量

*552final方法

行5.5.3final類

5.5.1final變量

,使用關(guān)鍵字final修飾一個基本數(shù)據(jù)類

型變量,并在聲明的同時給定其值,

那么該變量就成為一個常量。

例:

finaldoublePI=3.1415;

PI=3;//錯誤

5.5.1final變量(續(xù))

-使用關(guān)鍵字final修飾的變量并不一定需要在

聲明的同時給定其值。

例:

publicvoidg(doubler)

(

finaldoublePI;

PI=3.1415;

doublearea=PI*r*r;

System.out.printIn(area);

}

注意:任何一個變量被關(guān)鍵字final修飾后,一

旦初始化,其值便不能改變。

5.5.1final變量(續(xù))lava

,關(guān)鍵字final修飾的變量用作類的數(shù)據(jù)

成員時,系統(tǒng)并不會為它提供默認(rèn)值。

必須在聲明的同時指定其值(即定義

常量)或利用構(gòu)造方法初始化。

例5-7關(guān)鍵字final

源代碼運行

5.5.1final變量(續(xù))

-當(dāng)某個形參被final修飾時,可以在方法中讀

取它的值,但不能改變。

例:

classA

publicvoidf(finalinti,intj)

i++;〃錯誤

j++;//正確

}

publicintg(finalintj)

returnj*2;〃正確

)

5.5.1final變量(續(xù))

因用關(guān)鍵字final修飾一個對象變量時,實際修

飾的是對象的引用,該引用一旦被初始化

連接到某個對委后,便不能連接到另一對

象。但對象自身成員質(zhì)值可以改變。

例:

classA

(

inti=10;

)

classB

|

finalAa=newA();

publicstaticvoidmain(String[]args)

Bb=newB();

b.a.i++;〃正確

b.a=newA();〃錯誤

)

)

5.5.2final方法lava

使用關(guān)鍵字final修飾的方法不能在繼承過程中

被子類覆蓋。

例:

classA

(

finalvoidf()〃將方法聲明為final,它不能被覆蓋

(

System.out.printIn("f()inA");

)

)

classBextendsA

(

voidf()〃錯誤,覆蓋了父類中的final方法

|

System.out.printIn("f()inB");

)

voidf(inti)//正確,final方法可以重載

(

System.out.printIn("f(inti)inB");

)

)

5.5.2final方法(續(xù))H

卡類的私有方法不能被覆蓋,因此,它

們都是final的。如果嘗試在子類中覆

蓋它,實際上定義的是一個新的方法,

與原來的私有方法沒有任何關(guān)系。

衣可以使用關(guān)鍵字final明確修飾某個私

有方法,不過,這并沒有什么實際意

義。

5.5.3final類

,使用關(guān)鍵字final修飾的類不能被其他類

繼承。

例:

finalclassA{}

classBextendsA{}//錯誤,final類不能被繼承

,由于final類沒有子類,其中的方法不可

能被覆蓋,因此,final類中的所有方法

都是final的。

0

J■-J

5.6對象類型轉(zhuǎn)換lava

-一個類的對象在一定條件下可以轉(zhuǎn)換成繼

承鏈中的另一個類的對象:

-一個子類對象的類型可以向上轉(zhuǎn)換成它的父類

類型,這種轉(zhuǎn)換是安全的,Java編譯器能自動進(jìn)

行。

-一個父類對象的類型一般不能向下轉(zhuǎn)換成它的

子類類型。但有一種情況除外,如果一個父類

對象引用連接的實際上是一個子類對象,就可

以使用強制類型轉(zhuǎn)換將這個父類對象轉(zhuǎn)換成子

類類型。

5.6對象類型轉(zhuǎn)換(續(xù))lava

-將一個父類對象的類型轉(zhuǎn)換成它的子類類

型時,必須確保其引用連接的實際上是該

子類的一個對象,這可以利用運算符

instanceof來完成。運算符instanceof的作用

是檢查某個對象的類型是否是某個指定類

或其子類,如果是,且該對象不為null,則

返回true,否則返回false。

例5-8對象類型轉(zhuǎn)換

源代碼編譯運行

5.7多態(tài)與動態(tài)綁定

名力、

多^"*

執(zhí)

其>

O

夕Java語言的多態(tài)性是通過動態(tài)綁定實

現(xiàn)的。所謂綁定是指建立方法調(diào)用語

句和方法之間的關(guān)系,而動態(tài)綁定是

指在程序運行時,根據(jù)對象的實際類

型調(diào)用相應(yīng)的方法。

5.7多態(tài)與動態(tài)綁定(續(xù))

b應(yīng)用多態(tài),可使程序具有良好的可擴充

性。

例5-9多態(tài)

源代碼編譯運行

5.8抽象類和抽象方法圖

田抽象方法只有方法頭,沒有具體的方法體。

例:

abstractvoidf();

有含有抽象方法的類是抽象類,抽象類必須使用

關(guān)鍵字abstract修飾。不過,一個抽象類笄下一

定擁有抽象方法。

例:

abstractclassA

publicvoidf(){}

)

注意:抽象類只能用作其他類的父類,不能創(chuàng)建

其對象。

5.8抽象類和抽象方法(續(xù))

鏟一般來說,繼承于抽象類的類應(yīng)該實現(xiàn)父類中

的所有抽塞方法。如果沒有,那么該子類也就

成為抽象美。

例:

abstractclassA

(

publicabstractvoidf();

)

classBextendsA//錯誤

(

publicvoidg(){}

)

classCextendsA

publicvoidf(){}//實現(xiàn)類A中的抽象方法

)

5.8抽象類和抽象方法(續(xù))lava

-靜態(tài)方法不能聲明為抽象的。

-私有方法不能聲明為抽象的。

例5-10抽象類和抽象方法

源代碼編譯運行

5.9接口

-5.9.1定義接口

,5.9.2實現(xiàn)接口

卡5.9.3接口繼承

5.9.1定義接口

int一rfac一A

int1=1;

voidf();

)

注意:接口中的數(shù)據(jù)成員都是公用靜態(tài)常量,不

需要明確聲明;接口中的方法都是公用抽象方法,同

樣不需要明確聲明。當(dāng)然,也可以明確聲明,不過,

這并沒有什么實際意義。但是,不可以將它們聲明為

其他,否則,編譯器會報告錯誤。

5.9.1定義接口(續(xù))

-接口可以使用修飾符public修飾或保持默認(rèn)。

小與類相同,每個接口經(jīng)編譯后都會生成一個獨

立的字節(jié)碼文件。

卡可以將接口想象成一個純粹的抽象類,不過,

抽象類中還可以包含變量和具體方法等。在使

用上,接口與抽象類有許多相似之處,比如,

不能創(chuàng)建接口的對象;可以用作變量的數(shù)據(jù)類

型;可以用作對象轉(zhuǎn)換的類型;等等。

5.9.2實現(xiàn)接口lava

夕實現(xiàn)接口中的方法時,必須用修飾符public修飾。

行如果一個類沒有實現(xiàn)接口中的全部方法,該類就成

為抽象突。

例:

interfaceA

(

voidf();

voidg();

)

abstractclassBimplementsA

(

publicvoidf(){}

)

例5-11實現(xiàn)接口

源代碼編譯運行

592實現(xiàn)接口(續(xù))

,Java語言中,為了得到多重繼承的效

果,允許在一個類中實現(xiàn)多個接口,

甚至,還允許同時繼承一個類。

例5-12間接多重繼承

源代碼編譯運行

5.9.2實現(xiàn)接口(續(xù))lava

interfaceA

(

int1=10;

voidf();

)

interfaceB

(

int1=2;

intf(inti);

}

classC

(

publicvoidf(){}

)

classDextendsCimplementsA,B

(

inti=A.1;〃訪問重名常量必須以接口名為前綴

publicintf(inti)

returni;

}

)

5.9.2實現(xiàn)接口(續(xù))

int一rfac一A

(

void

溫馨提示

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

評論

0/150

提交評論