版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第四章面向?qū)ο蟪绦蛟O(shè)計(上)
本章學(xué)習(xí)要點理解繼承的概念;掌握繼承中構(gòu)造方法的調(diào)用順序;理解方法重寫的概念;理解上轉(zhuǎn)型的概念;理解多態(tài)的概念;理解抽象類和接口的區(qū)別;掌握抽象方法的寫法;掌握final關(guān)鍵字修飾的變量、方法和類的特點;理解內(nèi)部類的概念;掌握匿名內(nèi)部類的使用;掌握上轉(zhuǎn)型對象的特點。
4.1類的繼承
4.1.1“子類”和“父類”
4.1.2繼承中構(gòu)造方法的調(diào)用
4.1.3繼承中成員變量的隱藏
4.1.4繼承中成員方法的重寫
4.1.5繼承中的上轉(zhuǎn)型
4.1.6繼承中的多態(tài)
4.1.1“子類”和“父類”
classAextendsB{},其中A為子類,B為父類或者超類或者基類繼承就是為了避免多個類間重復(fù)定義共同的屬性和行為。子類可以繼承父類的一切非私有的成員,構(gòu)造方法除外。子類除了繼承父類的非私有成員外,還可以有自己的什么呢?可以有不同于父類的屬性和行為。
4.1.1“子類”和“父類”Java中類的繼承是“單繼承”,即只允許一個類直接繼承另一個類,也就是extends關(guān)鍵字后面只能有一個類名。例如:classStudentextendsPerson,Person1,Person2{…}會導(dǎo)致編譯錯誤。盡管一個類只能有一個直接的父類,但是它可以有多個間接的父類。例如:Student類繼承Person類,Person類繼承Person1類,Person1類繼承Person2類,那么Person1和Person2類是Student類的間接父類。
4.1.2繼承中構(gòu)造方法的調(diào)用
子類可以繼承父類中的非私有成員,也就是不能繼承父類中的私有成員,同時,子類也不能繼承父類中的構(gòu)造方法。子類既然不能繼承父類的構(gòu)造方法,那么子類是如何調(diào)用父類的構(gòu)造方法呢?就是通過“super();”這條語句,而且這條語句可以省略。但是如果把“super();”這條語句寫出來,它一定要在第一條的位置,否則會編譯出錯?!皊uper();”這條語句的作用就是調(diào)用父類中無參數(shù)的構(gòu)造方法,所以當(dāng)父類中沒有無參構(gòu)造時,子類中的構(gòu)造方法中第一條語句必須顯示地用super調(diào)用父類中有參數(shù)的構(gòu)造方法,否則編譯會出錯。
4.1.3繼承中成員變量的隱藏
如果子類繼承于某個父類,當(dāng)子類中聲明的成員變量和父類中聲明的成員變量重名時,子類就隱藏了繼承到的成員變量。那么,子類如何操作父類中被隱藏的成員變量呢?有兩種方法:第一,在子類中使用super關(guān)鍵字調(diào)用父類中被子類隱藏的成員變量。第二,子類通過調(diào)用從父類繼承的方法來操作隱藏的成員變量。Cat類中的第5行和第9行代碼,通過super.來調(diào)用父類Animal中被隱藏的成員變量name。
4.1.4繼承中成員方法的重寫
在子類中如果創(chuàng)建了一個方法與父類中的某個方法具有相同的名稱、相同的返回值類型、相同的參數(shù)列表,只是方法體中的實現(xiàn)不同,以實現(xiàn)不同于父類的功能。這種方式被稱為方法重寫,又稱為方法覆蓋。在重寫方法時,需要遵循以下規(guī)則:1.參數(shù)列表必須完全與被重寫的方法參數(shù)列表相同,否則不能稱其為重寫。2.返回的類型必須與被重寫的方法的返回類型相同,否則不能稱其為重寫。3.訪問修飾符的限制一定要不小于被重寫方法的訪問修飾符,否則不能稱其為重寫。4.重寫方法一定不能拋出新的檢査異?;蛘弑缺恢貙懛椒暶鞲訉挿旱臋z査型異常。4.1.5繼承中的上轉(zhuǎn)型
對象的類型轉(zhuǎn)換往往發(fā)生在具有繼承關(guān)系的父類和子類之間,向上類型轉(zhuǎn)換是將子類對象轉(zhuǎn)為父類對象。如果A是B的父類,當(dāng)把子類對象賦值給父類對象的引用時,稱父類的引用是子類對象的上轉(zhuǎn)型對象。例如:Aa;a=newB();或者:Aa=newB();其中newB()是子類B的一個對象,而a為父類A的一個引用變量,a=newB()這條語句使得父類的引用a指向了子類對象newB(),此時a就叫做newB()的上轉(zhuǎn)型對象。4.1.5繼承中的上轉(zhuǎn)型上轉(zhuǎn)型對象有三個特點:1.當(dāng)子類重寫了一個方法后,上轉(zhuǎn)型對象調(diào)用方法時,調(diào)用的必須是經(jīng)過重寫后的方法。2.當(dāng)子類繼承或隱藏了某個成員變量或方法,此時上轉(zhuǎn)型對象可以訪問。3.上轉(zhuǎn)型對象不能操作子類新增的成員變量,也不能操作子類新增的方法。在上轉(zhuǎn)型的三個特點中,最常用的就是第1條。
4.1.6繼承中的多態(tài)
Java實現(xiàn)多態(tài)有3個必要條件:繼承、重寫和向上轉(zhuǎn)型。4.2抽象類4.2.1抽象方法4.2.2抽象類4.2.1抽象方法
用abstract修飾的方法稱為抽象方法,抽象方法一般位于父類中,而且要被子類繼承。聲明抽象方法的一般格式如下:[方法修飾符]abstract方法返回值類型
方法名([參數(shù)列表]);抽象方法是在類中僅僅有聲明部分,并沒有實現(xiàn)方法體。構(gòu)造方法、靜態(tài)方法、私有方法不能被聲明為抽象的方法。4.2.2抽象類
用關(guān)鍵字abstract修飾的類稱為抽象類。抽象類的作用類似于“模板”,通常先給出屬性或方法的格式,然后根據(jù)這些格式來派生出新的子類,再由其子類來創(chuàng)建對象。定義抽象類的一般格式如下:[類修飾符]abstractclass類名{
聲明成員變量
聲明抽象方法//此處不能有方法體
定義一般方法//此處可以包含方法體
……}4.2.2抽象類有關(guān)抽象類說明如下:1.抽象類只能聲明對象,而不能創(chuàng)建具體對象即不能被實例化。2.在抽象類中,可以包含抽象方法,也可以包含非抽象方法,也可以不包含抽象方法。3.包含抽象方法的類一定是抽象類。4.如果一個類是某個抽象類的子類,那么該子類既可以抽象類,也可以是非抽象類。5.當(dāng)抽象類的子類是非抽象類時,必須重寫父類中所有的抽象方法。4.3接口4.3.1接口的定義4.3.2接口的實現(xiàn)4.3.3接口與抽象類4.3.4接口的回調(diào)4.3.5內(nèi)部類4.3.6匿名內(nèi)部類4.3.1接口的定義
接口的定義包括接口聲明和接口體兩部分。接口定義的格式如下:[接口修飾符]interface接口名稱[extends父接口名]{
接口體}4.3.1接口的定義對接口定義說明如下:1.接口中全部的數(shù)據(jù)都是常量,用publicfinal修飾。其中final關(guān)鍵字可以修飾類中的成員變量、成員方法,甚至可以修飾類。用final修飾的成員變量是最終變量,即為常量。程序中的其他部分可以調(diào)用該變量,但不能修改該變量的值。用final修飾的成員方法是最終方法,該方法不能被子類重寫,只能被調(diào)用。用final修飾的類是最終類,最終類不能被繼承,即沒有子類。2.全部的方法都是抽象方法,用publicabstract修飾,通常修飾符是可以省略的。3.與關(guān)鍵字class類似,interface是聲明接口的關(guān)鍵字。4.3.2接口的實現(xiàn)
Java中類與類之間的關(guān)系叫“繼承”,用extends關(guān)鍵字表示。Java中的類和接口之間的關(guān)系叫“實現(xiàn)”,即類實現(xiàn)接口,用implements關(guān)鍵字表示。Java中類繼承是“單繼承”,即一個類只能有一個直接父類,但是類實現(xiàn)接口卻支持“多實現(xiàn)”,即一個類可以同時實現(xiàn)多個接口,這也是接口出現(xiàn)的真正意義。接口和接口之間的關(guān)系叫“繼承”,一個接口可以繼承多個接口,但是接口之間的“繼承”關(guān)系,在實際開發(fā)項目中幾乎用不到。所以,我們只來看類和接口之間的實現(xiàn)關(guān)系。4.3.2接口的實現(xiàn)接口中的方法都是抽象的,所以當(dāng)一個類實現(xiàn)了某個接口時,就必須重寫接口中所有的方法。定義實現(xiàn)接口類的一般格式如下:[修飾符]class類名[extends父類名]implements接口名列表{[類的成員變量說明][類的構(gòu)造方法定義][類的成員方法定義]
接口方法定義//實現(xiàn)接口方法}4.3.2接口的實現(xiàn)一個類可以通過使用關(guān)鍵字implements實現(xiàn)一個或多個接口。當(dāng)一個類實現(xiàn)了多個接口時,多個接口之間用逗號隔開。例如:classAimplementsPrintable,Addable4.3.3接口與抽象類
抽象方法可以存在于抽象類中,而接口中所有的方法都是抽象的,從這個角度說,接口是一種特殊的抽象類。接口和抽象類之間有什么不同呢?1.基本語法不同接口中所有的方法都是抽象的,即只有方法的定義,沒有方法的實現(xiàn)。但是抽象類中可以包含抽象方法,也可以包含非抽象方法,即抽象類中既可以有方法的定義,也可以有方法的實現(xiàn)。4.3.3接口與抽象類2.實現(xiàn)類不同類和接口之間的關(guān)系是類實現(xiàn)接口,而且可以同時實現(xiàn)多個接口。類和類之間的關(guān)系叫繼承,一個類只能繼承一個類。3.設(shè)計思想不同“抽象”在面向?qū)ο笏枷胫惺且粋€很重要的概念。Java中實現(xiàn)抽象有兩種方式:接口和抽象類。抽象類是對一組具有相同屬性和方法的邏輯上有關(guān)系的事物的一種抽象,而接口則是對一組具有相同屬性和方法的邏輯上不相關(guān)的事物的一種抽象。因此抽象類表示的是“isa”關(guān)系,接口表示的是“l(fā)ikea”關(guān)系。在實際的開發(fā)中,對于接口和抽象類的選擇,反映出設(shè)計人員看待問題的不同角度。4.3.4接口的回調(diào)
在面向?qū)ο蟮脑O(shè)計思想中,所有的對象都是通過類來描繪的。但是反過來,并不是所有的類都是用來描繪對象的,如接口和抽象類。因為接口和抽象類沒有構(gòu)造方法,故不能用其來實例化對象。前面講過“繼承中的上轉(zhuǎn)型”,即把子類對象賦值給父類的一個引用變量時,這個父類的引用變量就變成了這個子類對象的一個上轉(zhuǎn)型對象。利用上轉(zhuǎn)型對象可以實現(xiàn)“繼承中的多態(tài)”。接口中也有上轉(zhuǎn)型對象,即把接口的實現(xiàn)類對象賦值給接口的一個引用變量時,這個接口的引用變量就變成了這個實現(xiàn)類對象的一個上轉(zhuǎn)型對象,只不過在接口中我們稱為“接口的回調(diào)”。通過接口的回調(diào)也同樣可以實現(xiàn)接口中的多態(tài)。4.3.5內(nèi)部類
類的定義包括類的聲明和類體兩部分。在類體中出現(xiàn)的叫做類的成員。類的成員包括變量、方法、構(gòu)造器、內(nèi)部類。一個類在另一個類的內(nèi)部定義,這個定義在其他類體中的類稱為內(nèi)部類,包含內(nèi)部類的類叫外部類。根據(jù)內(nèi)部類是否有static修飾,可以將內(nèi)部類分成靜態(tài)內(nèi)部類和非靜態(tài)內(nèi)部類。4.3.5內(nèi)部類非靜態(tài)內(nèi)部類中不能聲明靜態(tài)變量,同樣也不能聲明靜態(tài)方法。非靜態(tài)內(nèi)部類中是通過外“外部類名.this.”引用外部類的實例變量。非靜態(tài)內(nèi)部類中是通過“外部類.”來引用外部類的靜態(tài)變量。外部類OutClass中有非靜態(tài)內(nèi)部類InnerClass,創(chuàng)建InnerClass對象的語句如下:OutClass.InnerClassinnerClass=newOutClass().newInnerClass();4.3.5內(nèi)部類靜態(tài)內(nèi)部類中可以定義實例變量和靜態(tài)變量靜態(tài)內(nèi)部類中只能通過“外部類對象”來調(diào)用該外部類的實例變量靜態(tài)內(nèi)部類中通過“外部類名.”來調(diào)用外部類的靜態(tài)變量外部類OutClass中有靜態(tài)內(nèi)部類InnerClass,創(chuàng)建InnerClass對象的語句如下:OutClass1.InnerClassinnerClass1=newOutClass1.InnerClass();4.3.6匿名內(nèi)部類
匿名內(nèi)部類是一種特殊的內(nèi)部類,適合用于創(chuàng)建那些只需要使用一次的類。匿名內(nèi)部類簡稱匿名類,沒有類名,故不能聲明對象,但是可以創(chuàng)建對象。使用匿名類創(chuàng)建對象時,只能用關(guān)鍵字new借助于超類或接口實現(xiàn),不具有static和abstract修飾符,并且不能派生子類。匿名類分為:和類相關(guān)的匿名類、和接口相關(guān)的匿名類。4.3.6匿名內(nèi)部類1.和類相關(guān)的匿名類如果存在一個類,并沒有聲明該類的子類,但是又想使用子類創(chuàng)建一個對象,此時Java語言允許定義一個沒有類的聲明部分的子類類體,稱為匿名類。它的功能等同于一個子類,但是由于不存在類名,所以只能創(chuàng)建對象,而不能聲明對象。4.3.6匿名內(nèi)部類2.和接口相關(guān)的匿名類如果一個類實現(xiàn)了某個接口,那么Java語言允許使用該類創(chuàng)建一個匿名類,被創(chuàng)建后的匿名類只有類體,沒有類的聲明。4.4本章小結(jié)4.1.1節(jié)講解了什么是“子類”,什么是“父類”以及Java中的“單繼承”。4.1.2節(jié)講解了子類中通過super調(diào)用父類中的構(gòu)造方法,尤其要注意的是,當(dāng)父類中沒有無
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 8燈光 說課稿-2024-2025學(xué)年六年級上冊語文統(tǒng)編版
- 2025年旋挖鉆機(jī)購銷及融資租賃服務(wù)合同3篇
- Unit 3 Travel Further Exploration 說課稿 -2024-2025學(xué)年高中英語上外版(2020)必修第一冊
- 二年級數(shù)學(xué)(上)計算題專項練習(xí)
- 2025年度產(chǎn)權(quán)分割公寓買賣合同模板4篇
- 現(xiàn)代農(nóng)業(yè)科技園區(qū)建設(shè)與發(fā)展報告
- 油品購銷合同書
- 2025年人教新起點九年級數(shù)學(xué)上冊月考試卷含答案
- 2025年滬教版選擇性必修1地理下冊階段測試試卷含答案
- 2025年滬教新版選修化學(xué)上冊階段測試試卷含答案
- 中國華能集團(tuán)公司風(fēng)力發(fā)電場運(yùn)行導(dǎo)則(馬晉輝20231.1.13)
- 中考語文非連續(xù)性文本閱讀10篇專項練習(xí)及答案
- 2022-2023學(xué)年度六年級數(shù)學(xué)(上冊)寒假作業(yè)【每日一練】
- 法人不承擔(dān)責(zé)任協(xié)議書(3篇)
- 電工工具報價單
- 反歧視程序文件
- 油氣藏類型、典型的相圖特征和識別實例
- 流體靜力學(xué)課件
- 顧客忠誠度論文
- 實驗室安全檢查自查表
- 證券公司績效考核管理辦法
評論
0/150
提交評論