版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Java程序設(shè)計專業(yè)核心課程
精品課程1教學(xué)計劃ORJECT了解Java程序的可復(fù)制性。了解Java程序的可擴(kuò)展性。理解Java語言中的抽象類。理解Java語言中的接口。1精品課程29.1Java抽象類Java語言提供了兩種類:一種是具體類,另一種是抽象類。前面章節(jié)接觸的類都是具體類,這一節(jié)將介紹抽象類。9.1.1?抽象類概念在前面章節(jié)介紹多態(tài)時,使用過幾何圖形類示例,其中Figure(幾何圖形)類中有一個onDraw(繪圖)方法,F(xiàn)igure有兩個子類:Ellipse(橢圓形)和Triangle(三角形),Ellipse和Triangle覆蓋onDraw方法。作為父類Figure(幾何圖形)在實際使用時其有多少個子類并不確定,目前有橢圓形和三角形,那么不同的用戶需求可能還會有矩形或圓形等其他幾何圖形,而onDraw方法只有確定是哪一個子類后才能具體實現(xiàn)。Figure中的onDraw方法不能具體實現(xiàn),所以只能是一個抽象方法。在Java中具有抽象方法的類稱為“抽象類”,F(xiàn)igure是抽象類,其中的onDraw方法是抽象方法。Figure是抽象類,Ellipse和Triangle是Figure子類,實現(xiàn)Figure的抽象方法為onDraw的。3精品課程9.1.2?抽象類聲明和實現(xiàn)在Java中,抽象類和抽象方法的修飾符是abstract,聲明抽象類Figure的示例代碼如下://Figure.java文件packagecom.a51work6;publicabstractclassFigure{①//繪制幾何圖形方法publicabstractvoidonDraw();②}代碼第①行是聲明抽象類,在類前面加上abstract修飾符。代碼第②行是聲明抽象方法,方法前面的修飾符也是abstract,注意抽象方法中只有方法的聲明,沒有方法的實現(xiàn),即沒有大括號({})部分。設(shè)計抽象方法的目的就是讓子類來實現(xiàn)的,否則抽象方法就沒有任何意義,實現(xiàn)抽象類的示例代碼如下://Ellipse.java文件packagecom.a51work6;//幾何圖形橢圓形publicclassEllipseextendsFigure{//繪制幾何圖形的方法@OverridepublicvoidonDraw(){System.out.println("繪制橢圓形...");}}//Triangle.java文件packagecom.a51work6;//幾何圖形三角形publicclassTriangleextendsFigure{//繪制幾何圖形方法@OverridepublicvoidonDraw(){System.out.println("繪制三角形...");}}上述代碼中聲明了兩個具體類:Ellipse和Triangle,它們實現(xiàn)(覆蓋)了抽象類Figure的抽象方法onDraw。4精品課程5精品課程其調(diào)用代碼如下://HelloWorld.java文件packagecom.a51work6;publicclassHelloWorld{publicstaticvoidmain(String[]args){//f1變量是父類類型,指向子類實例,發(fā)生多態(tài)Figuref1=newTriangle();f1.onDraw();//f2變量是父類類型,指向子類實例,發(fā)生多態(tài)Figuref2=newEllipse();f2.onDraw();}}上述代碼中實例化兩個具體類:分別是Triangle和Ellipse,對象f1和f2是Figure引用類型。9.2使用接口比抽象類更加抽象的是接口,在接口中,所有的方法都是抽象的。9.2.1?接口概念其實9.1.1小節(jié)中介紹的抽象類Figure可以更加徹底,即Figure接口,接口中所有方法都是抽象的,而且接口可以有成員變量?,F(xiàn)在將9.1.1小節(jié)中幾何圖形類改成接口。9.2.2?接口聲明和實現(xiàn)在Java中,接口的聲明使用的關(guān)鍵字是interface,聲明接口Figure的示例代碼如下://Figure.java文件packagecom.a51work6;6精品課程publicinterfaceFigure{①//接口中靜態(tài)成員變量Stringname="幾何圖形"//省略publicstaticfinal②//繪制幾何圖形方法voidonDraw();//省略public③}代碼第①行是聲明Figure接口,聲明接口使用interface關(guān)鍵字,interface前面的修飾符是public或省略。public是公有訪問級別,即可以在程序任何代碼中訪問;省略則是默認(rèn)訪問級別,只能在當(dāng)前包中訪問。代碼第②行是聲明接口中的成員變量,在接口中的成員變量都是靜態(tài)成員變量,即省略了public、static、final修飾符。代碼第③行是聲明抽象方法,即省略了public關(guān)鍵字。某個類實現(xiàn)接口時,要在聲明時使用implements關(guān)鍵字,當(dāng)實現(xiàn)多個接口時,接口之間用逗號(,)分隔,且實現(xiàn)接口時要實現(xiàn)接口中聲明的所有方法。實現(xiàn)接口Figure的示例代碼如下://Ellipse.java文件packagecom.a51work6.imp;importcom.a51work6.Figure;//幾何圖形橢圓形publicclassEllipseimplementsFigure{//繪制幾何圖形方法@OverridepublicvoidonDraw(){System.out.println("繪制橢圓形...");}}//Triangle.java文件packagecom.a51work6.imp;importcom.a51work6.Figure;//幾何圖形三角形publicclassTriangleimplementsFigure{//繪制幾何圖形方法@OverridepublicvoidonDraw(){System.out.println("繪制三角形...");}}上述代碼聲明了兩個具體類:Ellipse和Triangle,它們實現(xiàn)了接口Figure中的抽象方法onDraw。其調(diào)用代碼如下://HelloWorld.java文件importcom.a51work6.imp.Ellipse;importcom.a51work6.imp.Triangle;publicclassHelloWorld{publicstaticvoidmain(String[]args){//f1變量是父類類型,指向子類實例,發(fā)生多態(tài)Figuref1=newTriangle();7精品課程f1.onDraw();System.out.println();①System.out.println(F);②//f2變量是父類類型,指向子類實例,發(fā)生多態(tài)Figuref2=newEllipse();f2.onDraw();}}上述代碼中實例化了兩個具體類:Triangle和Ellipse,對象f1和f2是Figure接口引用類型。接口Figure中聲明了成員變量,它是靜態(tài)成員變量,代碼第①行和第②行是訪問name靜態(tài)變量。9.2.3?接口與多繼承在Java語言中,一個類可以繼承多個父類,但這會有潛在的風(fēng)險,如果兩個父類再有相同的方法,那么子類該繼承哪一個方法呢?這就是Java多繼承所導(dǎo)致的沖突問題。在Java中只允許繼承一個類,但可實現(xiàn)多個接口。通過實現(xiàn)多個接口的方式滿足多繼承的設(shè)計需求。如果多個接口中即便有相同方法,它們也都是抽象的,子類實現(xiàn)它們不會有沖突。實現(xiàn)接口InterfaceA和接口InterfaceB的代碼如下://InterfaceA.java文件packagecom.a51work6;publicinterfaceInterfaceA{8精品課程voidmethodA();voidmethodB();}//InterfaceB.java文件packagecom.a51work6;publicinterfaceInterfaceB{voidmethodB();voidmethodC();}從代碼中可見,這兩個接口都有兩個方法,其中方法methodB()完全相同。實現(xiàn)接口InterfaceA和InterfaceB的AB類代碼如下://AB.java文件packagecom.a51work6.imp;importcom.a51work6.InterfaceA;importcom.a51work6.InterfaceB;publicclassABextendsObjectimplementsInterfaceA,InterfaceB{①@OverridepublicvoidmethodC(){@OverridepublicvoidmethodA(){}9精品課程10精品課程@OverridepublicvoidmethodB(){②}}在AB類中的代碼第②行實現(xiàn)了methodB()方法。注意,在聲明AB類時,實現(xiàn)了兩個接口,接口之間使用逗號(,)分隔,見代碼第①行。9.2.4?接口繼承Java語言中允許接口和接口之間繼承。由于接口中的方法都是抽象方法,所以繼承之后也不需要做什么,接口之間的繼承要比類之間的繼承簡單得多。InterfaceB繼承了InterfaceA,在InterfaceB中還覆蓋了InterfaceA中的methodB()方法。ABC是InterfaceB接口的實現(xiàn)類,ABC需要實現(xiàn)InterfaceA和InterfaceB接口中的所有方法。實現(xiàn)接口InterfaceA和InterfaceB的代碼如下://InterfaceA.java文件packagecom.a51work6;publicinterfaceInterfaceA{voidmethodA();voidmethodB();}11精品課程//InterfaceB.java文件packagecom.a51work6;publicinterfaceInterfaceBextendsInterfaceA{@OverridevoidmethodB();voidmethodC();}InterfaceB繼承了InterfaceA,聲明時也要使用extends關(guān)鍵字。InterfaceB中的methodB()覆蓋了InterfaceA,事實上在接口中覆蓋方法,并沒有實際意義,因為它們都是抽象的,都是留給子類實現(xiàn)的。實現(xiàn)接口InterfaceB的ABC類代碼如下://ABC.java文件packagecom.a51work6.imp;importcom.a51work6.InterfaceB;publicclassABCimplementsInterfaceB{@OverridepublicvoidmethodA(){}@OverridepublicvoidmethodB(){}@OverridepublicvoidmethodC(){}}ABC類實現(xiàn)了接口InterfaceB,事實上是實現(xiàn)InterfaceA和InterfaceB中的所有方法,相當(dāng)于同時實現(xiàn)InterfaceA和InterfaceB接口。Java8新特性默認(rèn)方法和靜態(tài)方法{#java-8}。在Java8之前,盡管Java語言中接口已經(jīng)非常優(yōu)秀,但相比其他面向?qū)ο蟮恼Z言,其接口存在以下不足:不能實現(xiàn)可選方法,接口的方法全部是抽象的,實現(xiàn)接口時必須實現(xiàn)全部接口中的方法,哪怕是有些方法并不需要,也必須實現(xiàn)。9.2.5?沒有靜態(tài)方法針對上述問題,Java8在接口中提供了聲明默認(rèn)方法和靜態(tài)方法的能力。接口示例代碼如下://InterfaceA.java文件packagecom.a51work6;publicinterfaceInterfaceA{voidmethodA();StringmethodB();//默認(rèn)方法defaultintmethodC(){return0;}//默認(rèn)方法defaultStringmethodD(){return“這是默認(rèn)方法…”;}12精品課程命令說明快捷鍵重命名重命名所選擇的
Java
元素Alt+Shift+R移動移動所選擇的
Java
元素Alt+Shift+V抽取方法創(chuàng)建一個包含當(dāng)前所選語句或表達(dá)式的新方法,并相關(guān)的引用Alt+Shift+M抽取局部變量創(chuàng)建為當(dāng)前所選表達(dá)式指定的新變量,并將選擇替換為對新變量的引用Alt+Shift+L命令說明快捷鍵重命名重命名所選擇的
Java
元素Alt+Shift+R移動移動所選擇的
Java
元素Alt+Shift+V抽取方法創(chuàng)建一個包含當(dāng)前所選語句或表達(dá)式的新方法,并相關(guān)的引用Alt+Shift+M抽取局部變量創(chuàng)建為當(dāng)前所選表達(dá)式指定的新變量,并將選擇替換為對新變量的引用Alt+Shift+L命令說明快捷鍵重命名重命名所選擇的
Java
元素Alt+Shift+R移動移動所選擇的
Java
元素Alt+Shift+V抽取方法創(chuàng)建一個包含當(dāng)前所選語句或表達(dá)式的新方法,并相關(guān)的引用Alt+Shift+M抽取局部變量創(chuàng)建為當(dāng)前所選表達(dá)式指定的新變量,并將選擇替換為對新變量的引用Alt+Shift+L命令說明快捷鍵重命名重命名所選擇的
Java
元素Alt+Shift+R移動移動所選擇的
Java
元素Alt+Shift+V抽取方法創(chuàng)建一個包含當(dāng)前所選語句或表達(dá)式的新方法,并相關(guān)的引用Alt+Shift+M抽取局部變量創(chuàng)建為當(dāng)前所選表達(dá)式指定的新變量,并將選擇替換為對新變量的引用Alt+Shift+L//靜態(tài)方法staticdoublemethodE(){return0.0;}}在接口InterfaceA中聲明了兩個抽象方法:methodA和methodB,還表明了兩個默認(rèn)方法methodC和methodD,除此之外,還聲明了靜態(tài)方法methodE。接口中的默認(rèn)方法類似于類中的具體方法,給出了具體實現(xiàn),只是方法修飾符是default;接口中靜態(tài)方法類似于類中靜態(tài)方法。實現(xiàn)接口的示例代碼如下://ABC.java文件packagecom.a51work6.imp;importcom.a51work6.InterfaceA;publicclassABCimplementsInterfaceA{@OverridepublicvoidmethodA(){}@OverridepublicStringmethodB(){return"實現(xiàn)methodB方法...";}14精品課程@OverridepublicintmethodC(){return500;}}實現(xiàn)接口時,接口中原有的抽象方法在實現(xiàn)類中必須實現(xiàn)。默認(rèn)方法可以根據(jù)需要有選擇地實現(xiàn)(覆蓋)。靜態(tài)方法不需要實現(xiàn),實現(xiàn)類中不能擁有接口中的靜態(tài)方法。上述代碼中,ABC類實現(xiàn)了InterfaceA接口,InterfaceA接口中的兩個默認(rèn)方法ABC只是實現(xiàn)(覆蓋)了methodB。其調(diào)用代碼如下://HelloWorld.java文件packagecom.a51work6.imp;importcom.a51work6.InterfaceA;publicclassHelloWorld{publicstaticvoidmain(String[]args){//聲明接口類型,對象是實現(xiàn)類,發(fā)生多態(tài)InterfaceAabc=newABC();//訪問實現(xiàn)類methodB方法System.out.println(abc.methodB());//訪問默認(rèn)方法methodCSystem.out.println(abc.methodC());①//訪問默認(rèn)方法methodDSystem.out.println(abc.methodD());②//訪問InterfaceA靜態(tài)方法methodESystem.out.println(Interfa
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 綿竹市2025年公開招聘社區(qū)專職工作者(91人)參考題庫附答案
- 2026湖北省定向復(fù)旦大學(xué)選調(diào)生招錄考試備考題庫附答案
- 2026青海西寧市湟源縣水務(wù)發(fā)展(集團(tuán))有限責(zé)任公司招聘8人備考題庫附答案
- 2026河北省定向南開大學(xué)選調(diào)生招錄參考題庫必考題
- 2026廣東深圳大學(xué)經(jīng)濟(jì)學(xué)院鄭尊信教授課題組博士后招聘參考題庫必考題
- 2025年山東濟(jì)寧檢察機(jī)關(guān)招聘聘用制書記員筆試真題
- 2026年中國科學(xué)院合肥腫瘤醫(yī)院血液透析中心醫(yī)護(hù)人員招聘7名備考題庫完整參考答案詳解
- 2026年云南省教育廳招募基礎(chǔ)教育銀齡教師備考題庫(760人)有完整答案詳解
- 2026中國科學(xué)院遺傳與發(fā)育生物學(xué)研究所李家洋研究組人員招聘1人備考題庫及答案詳解(新)
- 2026廣東茂名市公安局電白分局第一批招聘警務(wù)輔助人員70人備考題庫及參考答案詳解1套
- JJF(京)3042-2025 水分接收器校準(zhǔn)規(guī)范
- 財務(wù)部2025年總結(jié)及2026年工作計劃
- 2026-2031年中國糞便菌群移植(FMT)行業(yè)市場現(xiàn)狀分析及未來趨勢研判報告
- 2025至2030全球及中國場館管理軟件行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 導(dǎo)尿管相關(guān)尿路感染預(yù)防與控制標(biāo)準(zhǔn)2025
- 工程服務(wù)協(xié)議
- 面試 軟件開發(fā)工程師 含答案
- 《請欣賞別人》課件
- 無痛胃腸鏡科普課件
- 2026屆四川省宜賓市普通高中高一化學(xué)第一學(xué)期期末統(tǒng)考試題含解析
- 口腔美學(xué)案例分享
評論
0/150
提交評論