




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
4.1類的繼承機(jī)制4.2
super關(guān)鍵字4.3
方法重寫4.4
final關(guān)鍵字4.5抽象類和接口客觀世界中的事物都是普遍聯(lián)系的。事物之間的聯(lián)系可以劃分為橫向關(guān)聯(lián)和縱向關(guān)聯(lián)。橫向關(guān)聯(lián)是指同一歷史時(shí)期的事物之間的聯(lián)系,縱向關(guān)聯(lián)是指不同歷史時(shí)期的事物之間的聯(lián)系。在Java編程中,一個(gè)類的對(duì)象可以作為另外一個(gè)類的成員,或者作為其成員方法的形參以及返回值,使得類與類之間形成了橫向關(guān)聯(lián);同時(shí),作為典型的面向?qū)ο缶幊陶Z言,Java語言支持類之間的繼承關(guān)系,這讓類與類之間形成了縱向關(guān)聯(lián)。Java類與類之間縱橫交錯(cuò)的關(guān)聯(lián)使得編程更加靈活,對(duì)客觀事物的描述更加合理科學(xué)。4.1類的繼承機(jī)制在面向?qū)ο蟮木幊讨?,繼承描述的是類與類之間的關(guān)系,它是面向?qū)ο缶幊套钪匾奶匦?。在Java語言中,類的繼承是指在一個(gè)現(xiàn)有類的基礎(chǔ)上去構(gòu)建一個(gè)新的類,構(gòu)建出來的新類被稱作子類(也叫派生類),現(xiàn)有類被稱作父類(也叫基類),子類會(huì)自動(dòng)擁有父類所有可繼承的屬性和方法。在程序中,如果想聲明一個(gè)類繼承另一個(gè)類,需要使用extends關(guān)鍵字。Java語言中,類的繼承有以下幾個(gè)特點(diǎn):(1)Java類只支持單繼承,不允許多繼承。也就是說一個(gè)類最多只能有一個(gè)父類,這是Java類繼承與C++類繼承最大的區(qū)別。(2)一個(gè)類可以是多個(gè)類的父類。(3)Java允許多層繼承,也就是說一個(gè)類既可以是某個(gè)類的子類,也可以同時(shí)是另一個(gè)類的父類。父類中只有被protected和public修飾的成員才能夠被子類直接使用,或者父類與子類在同一個(gè)包內(nèi),子類對(duì)象也可以直接使用由default修飾的父類的成員。4.2super關(guān)鍵字Java類的繼承機(jī)制中,子類并非繼承了父類所有的成員,父類的構(gòu)造方法是不能夠被繼承的。若父類的成員變量是私有的,那么在子類構(gòu)造方法中就不能被訪問。當(dāng)創(chuàng)建子類對(duì)象的時(shí)候,可以使用子類的構(gòu)造方法來對(duì)本類定義的成員變量進(jìn)行初始化,卻不能對(duì)繼承而來的成員變量進(jìn)行賦值。這個(gè)問題該如何解決呢?這就需要用到Java語言中的super關(guān)鍵字了。Java語言中的super關(guān)鍵字與this關(guān)鍵字有異曲同工之妙,它們都屬于類對(duì)象的引用。區(qū)別在于:this關(guān)鍵字表示的是本類對(duì)象的引用,而super關(guān)鍵字表示的是父類對(duì)象的引用。兩者在使用上也十分相似。在父類成員的訪問權(quán)限允許的條件下,super關(guān)鍵字主要用于以下三個(gè)功能:使用super關(guān)鍵字直接調(diào)用父類的構(gòu)造方法來初始化繼承而來的成員變量,這樣就解決了剛才的問題。由于JVM只有在實(shí)例化對(duì)象的時(shí)候才會(huì)自動(dòng)調(diào)用類的構(gòu)造方法,因此使用super調(diào)用父類的構(gòu)造方法時(shí),也必須寫在子類的構(gòu)造方法中,而且必須遵循以下語法要求:(1)super關(guān)鍵字調(diào)用父類構(gòu)造方法的代碼只能放在子類構(gòu)造方法中的首句。由于super和this關(guān)鍵字調(diào)用構(gòu)造方法時(shí)都需要放在構(gòu)造方法的首句,因此一個(gè)構(gòu)造方法中不可以同時(shí)使用super和this關(guān)鍵字來調(diào)用各自類的構(gòu)造方法,也不可以同時(shí)有兩個(gè)super關(guān)鍵字調(diào)用父類構(gòu)造方法的代碼。(2)如果子類和父類中均沒有顯式的定義構(gòu)造方法,那么系統(tǒng)會(huì)在子類的缺省構(gòu)造方法里面調(diào)用父類的缺省構(gòu)造方法。(3)如果子類中的構(gòu)造方法沒有顯式調(diào)用父類的構(gòu)造方法,那么系統(tǒng)將自動(dòng)為其調(diào)用父類無參的構(gòu)造方法。(4)如果父類中定義了有參的構(gòu)造方法,且子類構(gòu)造方法中沒有使用this調(diào)用自己的構(gòu)造方法,那么在該構(gòu)造方法中必須直接調(diào)用父類有參的構(gòu)造方法。(5)子類構(gòu)造方法中出現(xiàn)了使用this關(guān)鍵字調(diào)用本類另一個(gè)構(gòu)造方法時(shí),不可以再使用super關(guān)鍵字直接調(diào)用父類的構(gòu)造方法,但總能夠通過本類其他的構(gòu)造方法來調(diào)用父類的某個(gè)構(gòu)造方法。4.3方法重寫在Java語言中提供了重寫父類方法的機(jī)制,通常稱為方法覆蓋或方法復(fù)寫。此時(shí)在子類對(duì)象調(diào)用speek方法時(shí),JVM運(yùn)行的是子類中自定義的speek方法。如果還需要調(diào)用從父類繼承而來的speek方法時(shí),使用super關(guān)鍵字在子類方法內(nèi)調(diào)用即可。在Java語言中將第一種實(shí)現(xiàn)方式叫作對(duì)象的淺復(fù)制,將第二種實(shí)現(xiàn)方式叫作對(duì)象的深復(fù)制。淺復(fù)制使得兩個(gè)對(duì)象共用一個(gè)數(shù)據(jù)空間,而深復(fù)制是兩個(gè)對(duì)象有各自獨(dú)立的數(shù)據(jù)空間,數(shù)據(jù)空間中的屬性值完全相同。淺復(fù)制后,任意改變其中一個(gè)對(duì)象的值,另一個(gè)對(duì)象的值也隨之改變;深復(fù)制后兩個(gè)對(duì)象的值完全獨(dú)立沒有關(guān)聯(lián)。由此可知,深復(fù)制的代碼安全性會(huì)更高,建議采用深復(fù)制的形式。4.4final關(guān)鍵字到Java語言中的常量分為字面常量和字符常量。其中字面常量就是常數(shù),它是具體的一個(gè)數(shù)字、字符或者字符串;而字符常量是一個(gè)標(biāo)識(shí)符,它代表了一個(gè)數(shù)值,同時(shí)不能夠被改變。其實(shí)字符常量本質(zhì)就是值不能被修改的變量,使用final關(guān)鍵字來修飾,因此也叫作final變量,或稱自定義常量。在Java語言中的final關(guān)鍵字表示“最終的”“不可改變”的意思,它既可以用來修飾基本數(shù)據(jù)類型變量,也可以用來修飾引用數(shù)據(jù)類型變量。此外,final關(guān)鍵字還可以用來修飾成員方法和類。4.4.1final關(guān)鍵字修飾變量變量根據(jù)它的作用域可分為局部變量和類的成員變量。局部變量通常是一個(gè)方法內(nèi)臨時(shí)定義的變量或方法的形參。final在修飾局部變量和類的成員變量時(shí)有些區(qū)別。1.final關(guān)鍵字修飾局部變量當(dāng)final關(guān)鍵字修飾局部變量時(shí),該變量在定義時(shí)可以不被初始化,但是使用之前,必須完成初始化且只能初始化一次,后續(xù)在使用的時(shí)候不可以再修改它的值。2.final關(guān)鍵字修飾成員變量final關(guān)鍵字在修飾成員變量時(shí),它要在所在類對(duì)象創(chuàng)建之前完成初始化,且只能被初始化一次。它的初始化方法有以下三種:(1)直接賦值(2)在構(gòu)造方法中將其初始化(3)在構(gòu)造代碼塊中將其初始化不論通過哪種方式初始化final成員變量,在使用中都不可以再修改它的值。通常,被final修飾的成員變量是所有對(duì)象共有的,也就是靜態(tài)成員變量,它的定義方式為:這種成員變量如果被public修飾符修飾,那么它就是全局可見的靜態(tài)常量。全局靜態(tài)常量可以直接使用類名訪問,不可修改,在Java程序中經(jīng)常用到。它可以在創(chuàng)建的時(shí)候直接初始化,也可以通過靜態(tài)代碼塊對(duì)其進(jìn)行初始化。4.4.2final關(guān)鍵字修飾方法當(dāng)final關(guān)鍵字用來修飾方法時(shí),該方法不允許在派生類中進(jìn)一步被重寫。4.4.3final關(guān)鍵字修飾類當(dāng)final關(guān)鍵字修飾一個(gè)類時(shí),則該類會(huì)成為最終類,即該類不能被繼承,但是該類可以有父類。final類在官方定義的類庫中出現(xiàn)得比較多,如String類、Integer類等。4.5抽象類和接口4.5.1抽象類在Java編程中,父類的方法經(jīng)常被子類重寫,以實(shí)現(xiàn)更加具體化的功能。有時(shí)候不需要?jiǎng)?chuàng)建父類的對(duì)象,只是使用子類的對(duì)象編寫程序,那么在父類中被重寫的方法只需要給出方法的聲明即可,方法的主體沒有存在的價(jià)值。在Java語言中,這種只有聲明、沒有主體的方法被稱為抽象方法。需要注意的是,類的構(gòu)造方法不可以被聲明為抽象方法。當(dāng)一個(gè)類中包含了抽象方法時(shí),那么這個(gè)類就是抽象類,在類聲明的時(shí)候,關(guān)鍵字class之前必須用abstract修飾。抽象類具有以下幾個(gè)特點(diǎn):(1)抽象類中可以沒有抽象方法,但有抽象方法的類必須聲明為抽象類;(2)抽象類中可以定義成員變量、成員方法和構(gòu)造方法;(3)可以聲明抽象類的對(duì)象,該對(duì)象可以被賦值為null,但該對(duì)象不可以被實(shí)例化;(4)抽象類可以繼承一個(gè)類,抽象類的父類可以是抽象類也可以是非抽象類。通常,抽象類主要用作父類使用,子類通過extends關(guān)鍵字繼承抽象類。抽象類的子類必須實(shí)現(xiàn)父類中的抽象方法,除非該子類也是一個(gè)抽象類。4.5.2接口Java語言引入了接口的概念。Java接口是一種抽象類型,是抽象方法和靜態(tài)常量的集合。Java接口除了抽象方法和靜態(tài)常量之外不可以再定義其他類型的成員。Java接口可以聲明一個(gè)對(duì)象,但不可以對(duì)其直接進(jìn)行實(shí)例化,即使該接口中沒有定義抽象方法。一個(gè)類只能繼承一個(gè)父類,但可以同時(shí)實(shí)現(xiàn)多個(gè)接口。接口使用Java關(guān)鍵字interface來聲明,其語法格式為:接口里面可以只有靜態(tài)常量或者抽象方法,也可以是空的。接口與類之間存在很多相似之處,主要有以下幾點(diǎn):(1)接口文件和類文件均保存在“.java”為擴(kuò)展名的文件中;(2)接口和類的編譯文件(字節(jié)碼文件)均保存在后綴名為“.class”的文件中;(3)接口和類的編譯文件同樣也必須放在與包名相匹配的目錄結(jié)構(gòu)中;(4)接口和抽象類中均可定義抽象方法及靜態(tài)常量。雖然接口與類有相類似的地方,但是它們屬于不同的概念。類描述對(duì)象的屬性和方法,接口則規(guī)定其實(shí)現(xiàn)類要實(shí)現(xiàn)的抽象方法及使用的靜態(tài)常量。表4-5-1描述了接口與抽象類之間的主要區(qū)別。表4-5-1中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園活動(dòng)方案-玩具交易會(huì)
- 25年公司、項(xiàng)目部、各個(gè)班組安全培訓(xùn)考試試題答案可打印
- 2025年新員工入職安全培訓(xùn)考試試題附參考答案【考試直接用】
- 2025購(gòu)銷合同范本模板
- 2025年版?zhèn)€人住房公積金借款合同樣本
- 2025裝修合同書附加協(xié)議
- 2025第三次結(jié)構(gòu)混凝土工程合同
- 2025年地震前兆觀測(cè)儀器合作協(xié)議書
- 2025年個(gè)體司機(jī)勞務(wù)合同
- 2025外賣配送服務(wù)合同模板
- 2024年中國(guó)光大銀行深圳分行招聘考試真題
- 節(jié)目招商合同協(xié)議
- 甘肅釀皮子制作方法
- 達(dá)夢(mèng)數(shù)據(jù)庫培訓(xùn)
- 人工智能基礎(chǔ)知到智慧樹章節(jié)測(cè)試課后答案2024年秋北京科技大學(xué)
- 美的空調(diào)制造工藝手冊(cè)
- ICRU62號(hào)報(bào)告詳細(xì)完整
- 介紹家鄉(xiāng) 貴州長(zhǎng)順課件
- 五年級(jí)下冊(cè)信息技術(shù)課件-8.安全過馬路|大連理工版 (共8張PPT)
- 美國(guó)西屋Ovation35培訓(xùn)(一)Ovation系統(tǒng)介紹及
- 畢業(yè)設(shè)計(jì)重型貨車制動(dòng)系統(tǒng)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論