版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
面向?qū)ο蠛诵募夹g(shù)項(xiàng)目三高等院校公共課系列精品教材Java開發(fā)綜合實(shí)戰(zhàn)主動(dòng)拓寬視野,把握事物的共性,著眼于事物之間的關(guān)系繼承優(yōu)秀傳統(tǒng)文化并創(chuàng)新,多形態(tài)呈現(xiàn)正能量人文精神思政目標(biāo)能夠使用繼承類和重寫方法實(shí)現(xiàn)對(duì)象多樣化能夠使用方法重載和類轉(zhuǎn)型實(shí)現(xiàn)多態(tài)能夠使用抽象類、接口和內(nèi)部類實(shí)現(xiàn)多重繼承技能目標(biāo)面向?qū)ο缶幊逃腥蠡咎匦裕悍庋b、繼承和多態(tài)。封裝的載體是類,封裝細(xì)節(jié),能提高代碼的安全性和復(fù)用性。繼承和多態(tài)本身也是很抽象的概念,需要讀者有較寬廣的視野,能站在對(duì)象共性的高度,把握不同對(duì)象的細(xì)節(jié)和相互關(guān)系,從而構(gòu)建高效和具有良好擴(kuò)展性和維護(hù)性的程序架構(gòu)。本項(xiàng)目主要介紹繼承和多態(tài)在Java程序中的實(shí)現(xiàn)方法,以及抽象類、接口和內(nèi)部類在面向?qū)ο缶幊讨械膽?yīng)用。項(xiàng)目導(dǎo)讀任務(wù)1繼承與多態(tài)任務(wù)2抽象類與接口任務(wù)3內(nèi)部類知識(shí)梳理繼承與多態(tài)任務(wù)1任務(wù)1繼承與多態(tài)任務(wù)引入通過上一個(gè)項(xiàng)目的學(xué)習(xí),小白了解了面向?qū)ο缶幊痰囊恍┗靖拍詈筒僮鳎帉懗雒嫦驅(qū)ο蟮某绦虼a,還需要掌握繼承和多態(tài)的實(shí)現(xiàn)方法。在Java中,實(shí)現(xiàn)類的繼承和多態(tài)有哪些常用方法呢?知識(shí)準(zhǔn)備繼承是一種由已有的類創(chuàng)建新類的機(jī)制。利用繼承,可以先定義一個(gè)共有屬性的一般類,根據(jù)這個(gè)一般類再定義具有特殊屬性的新類。多態(tài)是指同一個(gè)行為具有多種不同表現(xiàn)形式。簡單來說,就是“對(duì)外一種定義,內(nèi)部多種實(shí)現(xiàn)”。Java中的多態(tài)有兩種意義:操作名稱的多態(tài)和基于繼承實(shí)現(xiàn)的多態(tài);實(shí)現(xiàn)多態(tài)有三個(gè)必要條件:繼承、重載和向上轉(zhuǎn)型。一、實(shí)現(xiàn)繼承子類可以繼承父類原有的屬性和方法,也可以增加自己特有的屬性和方法。例如,正方形是一種特殊的四邊形,正方形類繼承了四邊形類的所有屬性和方法,還擴(kuò)展了一些正方形特有的屬性和方法。在類的聲明中,使用關(guān)鍵字extends聲明一個(gè)類繼承另一個(gè)類,定義一個(gè)子類一個(gè)類可以有多個(gè)子類,子類又可以作為父類派生其他子類。任務(wù)1繼承與多態(tài)注意:Java僅支持單繼承,也就是說一個(gè)類只可以有一個(gè)直接的父類。二、方法重寫重寫(override)也稱為覆蓋,是指在子類中定義一個(gè)方法,該方法的名稱和參數(shù)列表與父類的成員方法相同,但修改或重新編寫了實(shí)現(xiàn)內(nèi)容、返回值類型或訪問權(quán)限修飾符。也就是說,在Java中重寫方法必須滿足以下兩個(gè)條件:子類方法名和父類方法名必須相同參數(shù)類型、個(gè)數(shù)、順序必須完全相同任務(wù)1繼承與多態(tài)注意:重寫父類成員方法的返回值類型是基于JavaSE5.0版本以上編譯器的新功能。重寫父類方法時(shí),不能降低方法的訪問權(quán)限,也就是說,只能從小范圍向大范圍改變。例如,訪問權(quán)限從高到低為public、protected、private,可以將protected修改為public,但不能修改為private。案例——描述不同交通工具的時(shí)速本案例通過繼承類與重寫方法,描述不同交通工具的行駛速度。任務(wù)1繼承與多態(tài)運(yùn)行結(jié)果三、操作隱藏的父類成員super有兩個(gè)功能:(1)調(diào)用父類的成員變量和方法,(2)調(diào)用父類的構(gòu)造方法。語法格式如下:super.變量名:調(diào)用父類的成員變量。super.方法名(參數(shù)列表):調(diào)用父類的成員方法。super(參數(shù)列表):調(diào)用父類的有參構(gòu)造方法。如果沒有參數(shù),則調(diào)用父類的無參構(gòu)造方法,此時(shí)可以省略不寫。任務(wù)1繼承與多態(tài)案例——蝴蝶與動(dòng)物的關(guān)系本實(shí)例重寫父類的成員方法,并使用super關(guān)鍵字調(diào)用父類的構(gòu)造方法、成員變量和成員方法,演示super關(guān)鍵字的使用方法。任務(wù)1繼承與多態(tài)
運(yùn)行結(jié)果四、使用final關(guān)鍵字在某些情況下,出于安全考慮,不希望類中的方法被重寫覆蓋或修改,這種情況下可以使用關(guān)鍵字final進(jìn)行聲明。關(guān)鍵字final表示不可改變,不僅可修飾方法,還可修飾類以及類的成員變量。語法格式如下:(1)修飾類(2)修飾類的成員方法(3)修飾類的成員變量任務(wù)1繼承與多態(tài)五、方法重載實(shí)現(xiàn)多態(tài)方法重載(overload)是面向?qū)ο缶幊潭鄳B(tài)特性的一種表現(xiàn)形式,具體是指在同一個(gè)類中定義多個(gè)名字相同但參數(shù)不同的方法。同一個(gè)方法名就是對(duì)外的統(tǒng)一接口,參數(shù)列表不同導(dǎo)致內(nèi)部實(shí)現(xiàn)也不同。在Java中,重載方法必須滿足以下條件:方法名相同,包括大小寫方法的參數(shù)列表必須不同,可以是參數(shù)的類型、個(gè)數(shù)或順序不同方法的返回類型、修飾符可以相同,也可以不同任務(wù)1繼承與多態(tài)注意:“方法重載”與“方法重寫”從字面上看很相似,但意義大不相同。除參數(shù)列表的要求不一樣之外,方法重載可用于同一個(gè)類的所有方法,且一個(gè)方法在所在的類中可以被重載多次;但方法重寫只能用于繼承自父類的方法,且只能被子類重寫一次。案例——查看聯(lián)系人信息本案例通過重載構(gòu)造方法,根據(jù)聯(lián)系人信息的完整程度輸出相應(yīng)的聯(lián)系人信息。任務(wù)1繼承與多態(tài)運(yùn)行結(jié)果六、對(duì)象上轉(zhuǎn)型如果一個(gè)類有很多子類,并且這些子類都重寫了父類中的某個(gè)方法,當(dāng)把子類創(chuàng)建的對(duì)象的引用放到一個(gè)父類的對(duì)象中時(shí),就得到了該對(duì)象的一個(gè)上轉(zhuǎn)型對(duì)象。由于不同的子類在重寫父類的方法時(shí)可能產(chǎn)生不同的行為,因此上轉(zhuǎn)型對(duì)象在調(diào)用這個(gè)方法時(shí)就具有多種形態(tài)。對(duì)象上轉(zhuǎn)型的目的是使父類可以調(diào)用子類重寫的父類的方法,但父類并不能調(diào)用子類中獨(dú)有的屬性和方法,也就是說子類會(huì)失去其特有的屬性和功能。由于向上轉(zhuǎn)型是從一個(gè)較具體的類轉(zhuǎn)換到較抽象的類,因此是安全的,程序會(huì)自動(dòng)完成。任務(wù)1繼承與多態(tài)注意:不能直接將父類創(chuàng)建的對(duì)象的引用賦值給子類聲明的對(duì)象。如果子類重寫了父類的靜態(tài)方法,則子類對(duì)象的上轉(zhuǎn)型對(duì)象只能調(diào)用父類的靜態(tài)方法。案例——描述植物的開花時(shí)節(jié)本案例通過類轉(zhuǎn)型描述不同植物的開花時(shí)節(jié),演示使用類轉(zhuǎn)型簡化代碼,體現(xiàn)多態(tài)性的方法。任務(wù)1繼承與多態(tài)運(yùn)行結(jié)果抽象類與接口任務(wù)2任務(wù)引入通過上一個(gè)任務(wù)的學(xué)習(xí),小白了解了繼承和多態(tài)的原理和實(shí)現(xiàn)方法,但他并沒有淺嘗輒止。勤于思考的他想到了一個(gè)很實(shí)際的問題,如果繼承關(guān)系鏈較長,具體的子類好定義,最初的那個(gè)父類要包含所有子類的共性,又該如何定義呢?Java只支持單向繼承,如果有的子類需要繼承多個(gè)父類的方法,這種情況又該如何解決呢?知識(shí)準(zhǔn)備在繼承關(guān)系中,父類應(yīng)包含所有子類的共性。如果類的繼承關(guān)系鏈較長,則子類會(huì)越來越具體,反之,位于頂層的父類會(huì)越抽象、通用,有的甚至沒有具體的實(shí)現(xiàn)方法,以至于不能生成具體的實(shí)例。在Java中,這種不能描述一個(gè)具體的對(duì)象的類稱為抽象類,例如植物類。任務(wù)2抽象類與接口一、抽象類與抽象方法Java使用關(guān)鍵字abstract修飾抽象類。抽象類在繼承體系中常位于頂層,不能被實(shí)例化。抽象類中使用abstract修飾的方法稱為抽象方法。抽象類中可以包含成員變量、構(gòu)造方法、抽象方法和具體方法中的全部項(xiàng)或部分項(xiàng)。任務(wù)2抽象類與接口注意:構(gòu)造方法不能定義為抽象方法,用static修飾的類方法也不能定義為抽象方法。二、聲明與實(shí)現(xiàn)接口如果一個(gè)抽象類中的所有方法都是抽象方法,就可以使用接口來定義這個(gè)類。接口是一系列抽象方法的聲明集合,是一個(gè)完全抽象的類,沒有方法的實(shí)現(xiàn),具體實(shí)現(xiàn)由實(shí)現(xiàn)接口的類確定。因此這些方法可以在不同的地方被不同的類實(shí)現(xiàn),從而表現(xiàn)出不同的行為(功能)。接口使用關(guān)鍵字interface聲明,語法格式如下:[public]interface接口名稱[extends父接口名列表]{//接口體}接口的訪問權(quán)限可選值為public,如果省略,則使用默認(rèn)的訪問權(quán)限。任務(wù)2抽象類與接口實(shí)例——計(jì)算形狀的周長和面積本實(shí)例聲明一個(gè)接口,定義計(jì)算形狀周長和面積的抽象方法,然后定義兩個(gè)類實(shí)現(xiàn)該接口,分別輸出圓形和三角形的周長和面積。任務(wù)2抽象類與接口運(yùn)行結(jié)果內(nèi)部類任務(wù)3小白在學(xué)習(xí)網(wǎng)友分享的Java項(xiàng)目時(shí),發(fā)現(xiàn)有的程序代碼在一個(gè)類的內(nèi)部竟然也定義了一個(gè)類。通過請(qǐng)教網(wǎng)友,他知道這種類稱為“內(nèi)部類”。在Java中,內(nèi)部類的主要作用是什么呢?如何定義內(nèi)部類呢?知識(shí)準(zhǔn)備在Java程序開發(fā)中,為了更加準(zhǔn)確地描述結(jié)構(gòu)體的作用,允許嵌套程序類,即在一個(gè)類的內(nèi)部定義普通類、抽象類或接口,這些在類內(nèi)部定義的類結(jié)構(gòu)稱為內(nèi)部類,內(nèi)部類所在的類稱作外部類。根據(jù)內(nèi)部類的位置、修飾符和定義的方式可以將內(nèi)部類分為成員內(nèi)部類、局部內(nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。任務(wù)3內(nèi)部類任務(wù)引入一、成員內(nèi)部類所謂成員內(nèi)部類,就是在一個(gè)類內(nèi)部定義,作為類的成員的類。其中,OuterClass類是外部類,InnerClass類是內(nèi)部類。成員內(nèi)部類可用static、public、protected和private修飾,而外部類只能使用public或缺省修飾符。需要注意的是,成員內(nèi)部類中不能定義靜態(tài)變量。在這里,可能有讀者會(huì)有疑問,為便于維護(hù)程序,通常一個(gè).java文件中只定義一個(gè)類。任務(wù)3內(nèi)部類提示:內(nèi)部類在訪問外部類的成員時(shí),可以采用“外部類.this.屬性”的形式,明確地表明訪問的屬性是外部類的屬性。案例——銷售部的組織結(jié)構(gòu)本案例利用成員內(nèi)部類表示某企業(yè)銷售部的組織結(jié)構(gòu)。任務(wù)3內(nèi)部類
運(yùn)行結(jié)果二、局部內(nèi)部類如果內(nèi)部類定義在一個(gè)類的方法中或者一個(gè)作用域中,稱為局部內(nèi)部類。它與成員內(nèi)部類的區(qū)別在于,局部內(nèi)部類可看作是方法中的一個(gè)局部變量,因此不能有public、protected、private以及static修飾符,其訪問也僅限于方法內(nèi)或者該作用域內(nèi)。任務(wù)3內(nèi)部類案例——計(jì)算階乘本案例使用局部內(nèi)部類計(jì)算給定整數(shù)的階乘。通過該案例演示定義局部內(nèi)部類的方法。任務(wù)3內(nèi)部類運(yùn)行結(jié)果提示:本例中factorial()的返回值為long類型,因此在調(diào)用成員方法compute()并代入?yún)?shù)計(jì)算整數(shù)的階乘時(shí),要注意計(jì)算結(jié)果的范圍。如果計(jì)算結(jié)果超出long類型的取值上限,顯示結(jié)果可能為負(fù)數(shù)或0。三、靜態(tài)內(nèi)部類靜態(tài)內(nèi)部類與成員內(nèi)部類和局部內(nèi)部類相似,也是定義在一個(gè)類結(jié)構(gòu)中的類,只不過靜態(tài)內(nèi)部類需要使用關(guān)鍵字static修飾。定義靜態(tài)內(nèi)部類的語法格式如下:修飾符classOuterClass{staticclassInnerClass{//類體}}與類的靜態(tài)成員屬性類似,靜態(tài)內(nèi)部類不需要依賴于外部類對(duì)象就可以實(shí)例化。在外部類或外部類的非靜態(tài)方法中創(chuàng)建靜態(tài)內(nèi)部類對(duì)象的語法格式如下:內(nèi)部類內(nèi)部類對(duì)象=new內(nèi)部類();任務(wù)3內(nèi)部類案例——?dú)g迎新同學(xué)本案例利用靜態(tài)內(nèi)部類輸出歡迎新同學(xué)的文本信息,演示定義靜態(tài)內(nèi)部類,以及利用靜態(tài)內(nèi)部類訪問外部類的靜態(tài)成員和非靜態(tài)成員的方法。任務(wù)3內(nèi)部類運(yùn)行結(jié)果四、匿名內(nèi)部類匿名內(nèi)部類是在接口和抽象類的應(yīng)用上發(fā)展起來的。所謂匿名內(nèi)部類,就是沒有具體名稱的內(nèi)部類,通常用于類體非常?。ㄖ挥泻唵螏仔校?,且只需要使用一次的類,作為參數(shù)傳遞給方法,用于實(shí)現(xiàn)一個(gè)接口或?qū)崿F(xiàn)一個(gè)類。在Swing編程中,經(jīng)常使用這種方式綁定事件,編寫事件監(jiān)聽的代碼,不但方便,而且代碼容易維護(hù)。在Java中創(chuàng)建匿名內(nèi)部類的語法格式如下:new接口名或抽象類名(){//類體};任務(wù)3內(nèi)部類案例——自我介紹本案例首先創(chuàng)建一個(gè)接口,定義自我介紹的方法。然后使用匿名內(nèi)部類實(shí)現(xiàn)接口,輸出自我介紹內(nèi)容。任務(wù)3內(nèi)部類運(yùn)行結(jié)果五、Lambda表達(dá)式Lambda表達(dá)式是指應(yīng)用在SAM(SingleAbstractMethod,含有一個(gè)抽象方法的接口)環(huán)境下的一種簡化定義形式,用于簡化匿名內(nèi)部類的定義結(jié)構(gòu)。在Java中,Lambda表達(dá)式的基本語法形式如下:(參數(shù),參數(shù),…)->{方法體}; //定義方法體(參數(shù),參數(shù),…)->語句; //直接返回結(jié)果其中,參數(shù)與要重寫的抽象方法的參數(shù)一一對(duì)應(yīng);方法體中具體實(shí)現(xiàn)抽象方法。任務(wù)3內(nèi)部類案例——簡單的加法運(yùn)算本案例從控制臺(tái)獲取要進(jìn)行加法運(yùn)算的兩個(gè)整數(shù),然后利用Lambda表達(dá)式輸出這兩個(gè)整數(shù)的計(jì)算結(jié)果。通過本案例演示Lambda表達(dá)式的使用方法。任務(wù)3內(nèi)部類運(yùn)行結(jié)果項(xiàng)目總結(jié)本章項(xiàng)目實(shí)戰(zhàn)將新建一個(gè)實(shí)體模型Goods存放商品的名稱、數(shù)量和入庫價(jià)格,并重載Goods的構(gòu)造方法。然后在操作界面中使用類成員的setter()方法和getter()方法訪問商品對(duì)象的屬性。(1)復(fù)制并粘貼“進(jìn)銷存管理系統(tǒng)V2.0”,在CopyProject對(duì)話框中修改項(xiàng)目名稱為“進(jìn)銷存管理系統(tǒng)V3.0”,然后單擊Copy按鈕關(guān)閉對(duì)話框。(2)在PackageExplorer窗格中右擊項(xiàng)目名稱“進(jìn)銷存管理系統(tǒng)V3.0”,從彈出的快捷菜單中選擇New→Package命令,新建一個(gè)名為model的包。(3)右擊model包,從彈出的快捷菜單中選擇New→Class命令,新建一個(gè)名為Go
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)現(xiàn)代化農(nóng)機(jī)租賃服務(wù)合同3篇
- 二零二五年度股東合作打造智能物流網(wǎng)絡(luò)合同3篇
- 二零二五年度環(huán)保材料墻繪施工合同3篇
- 2025年度新型廣告字生產(chǎn)、安裝及售后服務(wù)合同3篇
- 二零二五年度老年健身器材租賃合同2篇
- 2025年度租賃車輛環(huán)保排放檢測與治理合同3篇
- 2025年度公司定制婚禮用花采購服務(wù)合同2篇
- 二零二五年度人工智能醫(yī)療設(shè)備研發(fā)團(tuán)隊(duì)勞動(dòng)合同終止補(bǔ)償協(xié)議2篇
- 2025年度養(yǎng)老院入住與醫(yī)療費(fèi)用結(jié)算合同2篇
- 二零二五年度口腔診所與口腔材料供應(yīng)商戰(zhàn)略合作合同3篇
- 2024年度陶瓷產(chǎn)品代理銷售與品牌戰(zhàn)略合作協(xié)議3篇
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之9:“5領(lǐng)導(dǎo)作用-5.3創(chuàng)新戰(zhàn)略”(雷澤佳編制-2025B0)
- 2024版旅游景區(qū)旅游巴士租賃合同3篇
- LINUX網(wǎng)絡(luò)操作系統(tǒng)知到智慧樹章節(jié)測試課后答案2024年秋湖北交通職業(yè)技術(shù)學(xué)院
- 河北省邯鄲市2023-2024學(xué)年高一上學(xué)期期末質(zhì)量檢測地理試題 附答案
- 2024年7月國家開放大學(xué)法學(xué)本科《知識(shí)產(chǎn)權(quán)法》期末考試試題及答案
- 2024年河南省公務(wù)員錄用考試《行測》試題及答案解析
- (2024年)剪映入門教程課件
- 四年級(jí)上冊(cè)道法知識(shí)點(diǎn)匯總
- 南京華興數(shù)控產(chǎn)品說明書
- 第八章 地籍圖測繪
評(píng)論
0/150
提交評(píng)論