版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建師范大學(xué)《常微分方程》2021-2022學(xué)年第一學(xué)期期末試卷
- 建設(shè)工程項目創(chuàng)優(yōu)管理措施
- 2013年海南省中考政治試題及答案
- 廣州房屋租賃合同樣本(33篇)
- 廣州市技術(shù)合同(3篇)
- 師范大學(xué)生頂崗實習(xí)報告
- 幼兒園捐款倡議書15篇
- 社區(qū)2024年上半年安全生產(chǎn)工作總結(jié)5篇
- L-767679-生命科學(xué)試劑-MCE
- Ketomycin-生命科學(xué)試劑-MCE
- 甲功檢測項目及臨床意義精品課件
- 小學(xué)英語名師工作室工作計劃2篇
- 幼兒園突發(fā)事件應(yīng)急處置流程圖
- 四年級《中國古代神話故事》知識考試題庫(含答案)
- 送達(dá)地址確認(rèn)書(完整版)
- 《新能源材料與器件》教學(xué)課件-04電化學(xué)能源材料與器件
- 河北省邢臺市藥品零售藥店企業(yè)藥房名單目錄
- DB34-T 4102-2022廢舊鋰離子動力蓄電池貯存安全技術(shù)條件-高清現(xiàn)行
- 遼寧省錦州市藥品零售藥店企業(yè)藥房名單目錄
- 電氣專項施工方案(廠房)
- 消化道出血病人護(hù)理查房課件
評論
0/150
提交評論