




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java程序設(shè)計(jì)基礎(chǔ)抽象類和接口抽象類和接口主要內(nèi)容19.1抽象類(重點(diǎn))9.2接口(重點(diǎn))9.3內(nèi)部類教學(xué)目標(biāo)2能理解抽象類的概念及作用能理解接口的概念及作用能準(zhǔn)確區(qū)分接口繼承與類繼承的不同之處能準(zhǔn)確區(qū)分接口和抽象類的不同及聯(lián)系能使用接口和抽象類實(shí)現(xiàn)面向基類的編程思想能理解內(nèi)部類的概念及作用能正確使用成員內(nèi)部類,靜態(tài)內(nèi)部類,局部?jī)?nèi)部類、匿名內(nèi)部類等四種類型的內(nèi)部類能使用接口和抽象類提高程序的復(fù)用度抽象類簡(jiǎn)介3除了前面介紹的類以外,還存在一種特殊的類——抽象類。如果在類的定義中存在著一些抽象的方法,那么這種類就稱為抽象類。語(yǔ)法上,抽象類是不能用于實(shí)例化對(duì)象的。抽象類往往用來(lái)表示抽象概念。舉個(gè)例子,中國(guó)人(Chinese類)和美國(guó)人(American類)都有“吃飯”這個(gè)行為,因此可以先定義一個(gè)Person類,然后讓Chinese和American都繼承這個(gè)類。但如何在父類Person中定義“吃飯”這個(gè)方法呢?一般而言,中國(guó)人是用筷子吃飯,并且吃的是中餐;而美國(guó)人是用刀叉吃飯,吃的是西餐,顯然二者對(duì)于“吃飯”這一行為的具體實(shí)現(xiàn)是不同的。因此,無(wú)法在父類Person中具體的定義“吃飯”這一方法。此時(shí),就可以將Person定義成一個(gè)抽象類,并將“吃飯”這個(gè)行為定義成抽象方法(只有方法聲明,但沒(méi)有方法體的方法),然后再在子類Chinese和American中分別對(duì)“吃飯”進(jìn)行具體的實(shí)現(xiàn)。抽象類的語(yǔ)法形式4在面向?qū)ο蠓治龊驮O(shè)計(jì)的過(guò)程中,經(jīng)過(guò)封裝和繼承的分析之后,可以先創(chuàng)建一個(gè)抽象的父類,該父類定義了其所有子類共享的一般形式(如Person類),具體細(xì)節(jié)再由子類來(lái)完成(如Chinese類和American類)。Java中定義抽象類的語(yǔ)法形式如下。 abstractclass類名{}Java也提供了一種特殊的方法,這個(gè)方法不是一個(gè)完整的方法,只含有方法的聲明,沒(méi)有方法體,這樣的方法叫做抽象方法,其語(yǔ)法形式如下。 訪問(wèn)修飾符abstract返回值方法名();抽象類的三個(gè)語(yǔ)法特征5抽象類不能被直接實(shí)例化抽象類的子類必須實(shí)現(xiàn)抽象方法(除非這個(gè)子類也是抽象類)抽象類里可以有普通方法,也可以有抽象方法,但是有抽象方法的類必須是抽象類。需要注意的是,抽象類里面也可以沒(méi)有抽象方法,只是把原來(lái)的類前面加上abstract關(guān)鍵字,使其變?yōu)槌橄箢?。例如,以下定義抽象類的代碼是符合語(yǔ)法規(guī)范的。接口簡(jiǎn)介6接口是一系列抽象方法的集合,與抽象類不同,不可以聲明普通方法。雖然有人常說(shuō),接口是一種特殊的抽象類,但是在面向?qū)ο缶幊痰脑O(shè)計(jì)思想層面,兩者還是有顯著區(qū)別的。抽象類更側(cè)重于對(duì)相似的類進(jìn)行抽象,形成抽象的父類以供子類繼承使用;而接口往往在程序設(shè)計(jì)的時(shí)候,定義模塊與模塊之間應(yīng)滿足的規(guī)約或者定義一種標(biāo)準(zhǔn),使各模塊之間能協(xié)調(diào)工作。接口的定義語(yǔ)法7Java接口定義的語(yǔ)法形式如下。 [修飾符]interface接口名[extends][接口列表]{接口體}interface前的修飾符是可選的,如果使用修飾符,則只能用public修飾符,表示此接口是公有的,在任何地方都可以引用它,這一點(diǎn)和類是相同的。接口是和類同一層次的,所以接口名的命名規(guī)則參考類名命名規(guī)則即可。extends關(guān)鍵詞和類語(yǔ)法中的extends類似,用來(lái)定義直接的父接口。和類不同,一個(gè)接口可以繼承多個(gè)父接口,當(dāng)extends后面有多個(gè)父接口時(shí),它們之間用逗號(hào)隔開(kāi)。接口的定義語(yǔ)法8接口體就是用大括號(hào)括起來(lái)的那部分,在接口體里定義接口的成員,包括常量和抽象方法。類實(shí)現(xiàn)接口的語(yǔ)法形式如下: [修飾符]class類名implements接口列表{類體}類實(shí)現(xiàn)接口用implements關(guān)鍵字,Java中的類只能是單繼承的,但一個(gè)Java類可以實(shí)現(xiàn)多個(gè)接口,這也是Java解決多繼承的方法。接口中不允許有實(shí)體方法9如果接口中增加實(shí)體方法,編譯時(shí)就會(huì)報(bào)錯(cuò),提示接口中不能有實(shí)體方法publicinterfaceEmailInterface{...//顯示郵件全部信息publicvoidshowEmail(){}}接口中的成員變量10接口中可以有成員變量,修飾符默認(rèn)為publicstaticfinal(即便不寫(xiě)修飾符也默認(rèn)是這樣),因?yàn)槭浅A克员仨氃诼暶鲿r(shí)對(duì)這些成員變量賦初值??梢赃@樣說(shuō),接口中的成員變量實(shí)際就是常量。接口中的抽象方法默認(rèn)且必須是public的。接口繼承與合并11如果讓一個(gè)類(Email)實(shí)現(xiàn)了多個(gè)接口(EmailInterface和PortInterface接口),但是再在EmailWriter類的writeEmail()方法中傳入對(duì)象時(shí),形參就必須是這個(gè)類(Email),而不能是該類實(shí)現(xiàn)的某個(gè)接口。根據(jù)多態(tài)的知識(shí),多態(tài)對(duì)象只能調(diào)用定義該對(duì)象的類和其父接口中的方法,因此如果給writeEmail()方法設(shè)置的形參只是某一個(gè)接口(如EmailInterface接口)類型,那么該形參將無(wú)法調(diào)用其他接口(PortInterface接口)中的方法。但如果將方法的參數(shù)類型設(shè)置為一個(gè)類而不是一個(gè)接口,這樣做就不是我們推薦的面向接口編程了。接口繼承的方式解決上述問(wèn)題,即用一個(gè)接口繼承多個(gè)接口,從而實(shí)現(xiàn)接口合并的效果。內(nèi)部類12內(nèi)部類是定義在類中的類,根據(jù)定義的類位置及修飾符的不同,分為了成員內(nèi)部類,靜態(tài)內(nèi)部類,局部?jī)?nèi)部類、匿名內(nèi)部類等四種類型。成員內(nèi)部類成員內(nèi)部類InnerClass可以直接訪問(wèn)外部類OuterClass中的屬性和方法,對(duì)于成員內(nèi)部類的使用,需要先生成外部類對(duì)象,然后再以外部類對(duì)象.new內(nèi)部類()的形式生成內(nèi)部類對(duì)象。靜態(tài)內(nèi)部類靜態(tài)內(nèi)部類InnerClass只能訪問(wèn)外部類OuterClass的靜態(tài)屬性和靜態(tài)方法,可以通過(guò)類名直接調(diào)用,如類名.方法()**。與之類似,靜態(tài)內(nèi)部類中的方法也可以通過(guò)**靜態(tài)內(nèi)部類名.方法()的形式調(diào)用。如果測(cè)試類和靜態(tài)內(nèi)部類不在同一個(gè).java文件中,那么可以通過(guò)外部類名.靜態(tài)內(nèi)部類.方法()的形式調(diào)用。內(nèi)部類13局部?jī)?nèi)部類JDK8.0以后,局部?jī)?nèi)部類InnerClass在訪問(wèn)外部方法method()定義的變量時(shí),可以省略給變量加final修飾。局部?jī)?nèi)部類只能在定義它的方法內(nèi)部使用,局部?jī)?nèi)部類的定義并不會(huì)影響外部類方法的使用。匿名內(nèi)部類我們?cè)诤罄m(xù)會(huì)學(xué)習(xí)多線程的知識(shí),多線程對(duì)象是Thread類型的,啟動(dòng)線程的方法是start()方法,并且線程的執(zhí)行邏輯可以以Runnable參數(shù)的形式放在Thread的構(gòu)造方法中,即newThread(Runnable對(duì)象).start()就可以啟動(dòng)一個(gè)線程。但Runnable是一個(gè)接口,其中包含了一個(gè)run()抽象方法,如果用以前的做法,我們就需要先定義一個(gè)Runnable的實(shí)現(xiàn)類,然后再實(shí)現(xiàn)類中重寫(xiě)run()方法,最后再創(chuàng)建一個(gè)Runnable實(shí)現(xiàn)類的對(duì)象,并把這個(gè)對(duì)象傳入到Thread()構(gòu)造方法中。但顯然這樣做過(guò)于復(fù)雜,此時(shí)就可以通過(guò)匿名內(nèi)部類的形式簡(jiǎn)化代碼。內(nèi)部類14publicclassOuterClass4{publicstaticvoidmain(String[]args){newThread(newRunnable(){@Overridepublicvoidrun(){//線程執(zhí)行邏輯...}}).start();}}筆試題15下列關(guān)于抽象類和接口描述正確的是()。A抽象類里必須含有抽象方法B接口中不可以有普通方法C抽象類可以繼承多個(gè)類,實(shí)現(xiàn)多繼承D接口中可以定義局部變量筆試題16在Java中,已經(jīng)定義兩個(gè)接口B和C,要定義一個(gè)實(shí)現(xiàn)這兩個(gè)接口的類,以下那個(gè)語(yǔ)句正確()AinterfaceAextendsB,CBinterfaceAimplementsB,CCclassAimplementsB,CDclassAimplementsB,implementsC筆試題17下列選項(xiàng)正確實(shí)現(xiàn)ITest接口的是()interfaceITest{Stringmethod(inti);}AclassITestImplimplementsITest{Stringmethod(inti){}}BclassITestImplimplement{Stringmethod(inti){}}CclassITestImplextendsITest{Stringmethod(inti){}}DclassITestImplimplementsITest{publicStringmethod(inti){}}筆試題18以下程序的輸出結(jié)果為?publicclassBase{publicBase(Strings){System.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)綠化工程勞動(dòng)力安排計(jì)劃
- 我的寵物狗與狗狗的點(diǎn)點(diǎn)滴滴寫(xiě)物(7篇)
- 陳婉怡我想對(duì)你說(shuō)350字(7篇)
- 走進(jìn)游戲森林900字8篇
- 中醫(yī)藥治療淋巴結(jié)炎的臨床研究進(jìn)展-洞察闡釋
- 包裝材料的簡(jiǎn)單項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 2025-2030全球及中國(guó)工作區(qū)聚合器行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 單點(diǎn)流量預(yù)測(cè)模型的非線性優(yōu)化研究-洞察闡釋
- 2025-2030全球及中國(guó)葉片和凋落物真空行業(yè)市場(chǎng)現(xiàn)狀供需分析及投資評(píng)估規(guī)劃分析研究報(bào)告
- 名人傳中的勵(lì)志故事與人生啟示教學(xué)教案
- 婚介所個(gè)人資料登記表格
- 整形醫(yī)院雙眼皮培訓(xùn)課件
- Meta分析很全的課件
- 電商倉(cāng)庫(kù)流程及診斷
- 施工場(chǎng)地平整施工方案
- 靜脈治療課件
- NPUAP壓瘡指南更新的解讀
- 2020年華為采購(gòu)物料環(huán)保規(guī)范?V4
- IPQC制程檢驗(yàn)流程圖
- 進(jìn)料檢驗(yàn)報(bào)告單
- 2022年江蘇省南京市中考?xì)v史試題(含答案)
評(píng)論
0/150
提交評(píng)論