版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第6章接口與實現(xiàn)
配合例子源代碼一起使用導讀主要內(nèi)容接口實現(xiàn)接口理解接口接口回調(diào)函數(shù)接口與Lambada表達式接口與多態(tài)接口變量做參數(shù)面向接口編程重點和難點重點:接口的理解;抽象類和接口的區(qū)別。難點:抽象類和接口的異同點接口概述Java不支持多重繼承(子類只能有一個父類)。classPeople{privateintaverHeight=166;}classChinaPeopleextendsPeople{intheight;publicintgetHeight(){returnheight;}}§6.1接口為了克服Java單繼承的缺點,Java使用了接口,一個類可以實現(xiàn)多個接口。使用關鍵字interface來定義一個接口。接口的定義和類的定義很相似,分為接口的聲明和接口體。1.接口聲明接口通過使用關鍵字interface來聲明格式:interface接口的名字如:interfacePrintable{…}interfacePrintable{}
§6.1接口2.接口體interfaceCom{publicstaticfinalintMAX=100;//等價寫法:intMAX=100;publicabstractvoidadd();//等價寫法:voidadd();publicabstractfloatsum(floatx,floaty);//等價寫法:floatsum(floatx,floaty);}
1)接口體中的抽象方法和常量JDK8版本之前接口體中只有抽象方法,所有的抽象方法的訪問權限一定都是public(允許省略public、abstract修飾符)。接口體中所有的static常量的訪問權限一定都是public(允許省略public、final和static修飾符,接口中不會有變量)。如§6.1接口2.接口體interfaceCom{publicfinalintMAX=100;publicabstractvoidadd();publicabstractfloatsum(floatx,floaty);publicdefaultintmax(inta,intb){//default方法returna>b?a:b;}}JDK8版本開始,允許使用default關鍵字,在接口體中定義稱作default的實例方法(不可以定義default的static方法),default的實例方法和通常的普通的方法比就是用關鍵字default修飾的帶方法體的實例方法。default實例方法的訪問權限必須是public(允許省略public修飾符)。如2)接口體中的default實例方法§6.1接口2.接口體publicinterfaceCom{publicstaticfinalintMAX=100;publicabstractvoidon();publicabstractfloatsum(floatx,floaty);publicdefaultintmax(inta,intb){returna>b?a:b;}publicstaticvoidf(){//static方法
System.out.println("注意是從JavaSE8開始的");}}JDK8版本開始,允許在接口體中定義static方法。如3)接口體中的static方法§6.1接口2.接口體從JDK9版本開始,允許在接口體中定義private的方法,其目的是配合接口中的default的實例方法,即接口可以將某些算法封裝在private的方法中,供接口中的default的實例方法調(diào)用,實現(xiàn)算法的復用4)接口體中的private方法接口的變量和方法的構(gòu)成規(guī)則:接口中的常量自動都是public、static,final,接口中的不是default的實例方法默認為publicabstract;接口也產(chǎn)生class文件。接口中的抽象方法不能被static和final修飾,因為類要重寫所有接口中的抽象方法。接口中沒有構(gòu)造函數(shù)。
§6.2實現(xiàn)接口①類實現(xiàn)接口類需要在類聲明中使用關鍵字implements聲明該類實現(xiàn)一個或多個接口。如果實現(xiàn)多個接口,用逗號隔開接口名。classDogextendsAnimalimplementsEatable,Sleepable②重寫接口中的方法類實現(xiàn)了某個接口,那么這個類就自然擁有了接口中的常量,default方法(去掉了default關鍵字),該類也可以重寫接口中的default方法(注意,重寫時需要去掉default關鍵字)。如果一個非abstract類實現(xiàn)了某個接口,那么這個類必須重寫該接口的所有abstract方法,即去掉abstract修飾給出方法體。類實現(xiàn)某接口,但類并不擁有接口的static方法和private方法。接口中除了private方法,其他的方法的訪問權限默認都是public的,重寫時不可省略public§6.2實現(xiàn)接口③使用接口中的常量和static方法可以用接口名訪問接口的常量、調(diào)用接口中的static方法,例如:Com.MAX;Com.f();例子1中AAA類實現(xiàn)了Com接口AAA.javaCom.javaExample6_1.java
6.3接口的UML圖
表示接口的UML圖和表示類的UML圖類似,使用一個長方形描述一個接口的主要構(gòu)成,將長方形垂直地分為三層。頂部第1層是名字層,接口的名字必須是斜體字形,而且需要用<<interface>>修飾名字,并且該修飾和名字分列在兩行。第2層是常量層,列出接口中的常量及類型,格式是“常量名字:類型”。第3層是方法層,也稱操作層,列出接口中的方法及返回類型,格式是“方法名字(參數(shù)列表):類型”?!?.4
接口回調(diào)接口回調(diào)是指:可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調(diào)用被類重寫的接口方法。實際上,當接口變量調(diào)用被類重寫的接口方法時,就是通知相應的對象調(diào)用這個方法。例子2
分析:Comcom;//聲明接口對象ImpleComobj=newImpleCom();//實現(xiàn)接口子類對象com=obj;//接口回調(diào)objOx12ab9§6.4
接口回調(diào)例子2使用了接口的回調(diào)技術例子2§6.5函數(shù)接口與Lambada表達式①函數(shù)接口如果一個接口里有且只有一個abstract方法,稱這樣的接口是單接口。JDK8之后,Java開始使用Lambada表達式,也將單接口稱為函數(shù)接口。②Lambada表達式通常的方法(也稱函數(shù)):intcomputeSum(inta,intb){returna+b;}Lambda表達式:(inta,intb)->{returna+b;}或(a,b)->{returna+b;}Lambda表達式就是只寫參數(shù)列表和方法體的匿名方法(參數(shù)列表和方法體之間的符號是->):(參數(shù)列表)->{
方法體
}§6.5函數(shù)接口與Lambada表達式③Lambada表達式的值Lambda表達式的值就是方法的入口地址由于Lambda表達式過于簡化,因此必須在特殊的上下文,編譯器才能推斷出Lambda表達式到底是哪個方法,才能計算出Lambda表達式的值,因此Java中的Lambada表達式主要用在單接口。即函數(shù)接口.④接口變量存放Lambada表達式的值允許把Lambada表達式的值(方法的入口地址)賦值給接口變量,那么接口變量就可以調(diào)用Lambada表達式實現(xiàn)的方法(即接口中的方法),這一機制稱為接口回調(diào)Lambada表達式實現(xiàn)的接口方法。注意
:不要混淆Lambda表達式的值(匿名方法的入口地址)和匿名方法的類型。匿名方法的類型可能是void型,即沒有返回值。例子3和例子2類似,但采用的是Lambada表達式實現(xiàn)例子3§6.6理解接口理解的關鍵點是:(1)接口可以抽象出重要的行為標準,該行為標準用抽象方法來表示。(2)可以把實現(xiàn)接口的類的對象的引用賦值給接口變量,該接口變量可以調(diào)用被該類實現(xiàn)的接口方法,即體現(xiàn)該類根據(jù)接口里的行為標準給出的具體行為。接口的思想在于它可以要求某些類有相同名稱的方法,但方法的具體內(nèi)容(方法體的內(nèi)容)可以不同,即要求這些類實現(xiàn)接口,以保證這些類一定有接口中所聲明的方法(即所謂的方法綁定)。接口在要求一些類有相同名稱的方法的同時,并不強迫這些類具有相同的父類?!?.6理解接口例子4中,要求MotorVehicles類(機動車)的子類Taxi(出租車)和Bus(公共汽車)必須有名稱為brake的方法(有剎車功能),但額外要求Taxi類有名字為controlAirTemperature和charge的方法(有空調(diào)和收費功能),即要求Taxi實現(xiàn)兩個接口,要求客車類有名字為charge的方法(有收費功能),即要求Bus只實現(xiàn)一個接口?!?.7
接口與多態(tài)可以通過在接口中聲明若干個abstract方法,表明這些方法的重要性,方法體的內(nèi)容細節(jié)由實現(xiàn)接口的類去完成。使用接口進行程序設計的核心思想是使用接口回調(diào),即接口變量存放實現(xiàn)該接口的類的對象的引用,從而接口變量就可以回調(diào)類實現(xiàn)的接口方法。例子5
§6.8
接口參數(shù)如果一個方法的參數(shù)是接口類型,我們就可以將任何實現(xiàn)該接口的類的實例的引用傳遞給該接口參數(shù),那么接口參數(shù)就可以回調(diào)類實現(xiàn)的接口方法。例子6
§6.9
abstract類與接口的比較接口和abstract類的比較如下:1.a(chǎn)bstract類和接口都可以有abstract方法。2.接口中只可以有常量,不能有變量;而abstract類中即可以有常量也可以有變量。3.a(chǎn)bstract類中也可以有非abstract的實例方法和static方法。JDK8之后,接口可以有default修飾的實例方法和static方法?!?.10
面向接口編程面向接口去設計程序,可以通過在接口中聲明若干個abstract方法,表明這些方法的重要性,方法體的內(nèi)容細節(jié)由實現(xiàn)接口的類去完成。使用接口進行程序設計的核心思想是使用接口回調(diào),即接口變量存放實現(xiàn)該接口的類的對象的引用,從而接口變量就可以回調(diào)類實現(xiàn)的接口方法?!?.11
應用舉例設計一個廣告牌,希望所設計的廣告牌可以展示許多公司的廣告詞。
例子7中除了主類(Example6_7)外,還有Avertisemen接口及實現(xiàn)該接口的WhiteCloudCorp(白云公司)和BlackLandCorp(黑土公司),以及面向接口的AdvertisementBoard類(廣告牌),程序運行效果如圖6.12。1.問題的分析2.設計接口3.設計廣
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025ESMO Asia肺癌靶向免疫治療進展
- 中學教師考核評價制度
- 養(yǎng)老院入住老人突發(fā)疾病應急處理制度
- 企業(yè)員工培訓與素質(zhì)發(fā)展路徑制度
- 企業(yè)內(nèi)部溝通與協(xié)調(diào)制度
- 2026河南濮陽市市直機關遴選公務員15人參考題庫附答案
- 2026年及未來5年市場數(shù)據(jù)中國水晶蠟燭燈行業(yè)發(fā)展運行現(xiàn)狀及發(fā)展趨勢預測報告
- 2026湖北恩施州恩施市城市社區(qū)黨組織書記實行事業(yè)崗位管理專項招聘2人備考題庫附答案
- 2026福建南平市醫(yī)療類儲備人才引進10人考試備考題庫附答案
- 2026福建海峽人才網(wǎng)絡資訊有限公司前端開發(fā)人員招聘1人考試備考題庫附答案
- 吉林省戶用光伏施工方案
- 工程部物業(yè)消防知識培訓課件
- 江西省婺源縣聯(lián)考2026屆數(shù)學七年級第一學期期末學業(yè)水平測試試題含解析
- 2025至2030水蛭素產(chǎn)品行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評估報告
- 非煤礦山安全員題庫及答案解析
- 餐飲連鎖加盟店標準運營手冊
- 軍人翻墻導致的危害課件
- 園區(qū)運營年終匯報
- 數(shù)據(jù)中心設備采購管理實施計劃
- (2025年標準)公司基地農(nóng)戶協(xié)議書
- 2025時事政治必考題50題(含答案)
評論
0/150
提交評論