第七章接口與實(shí)現(xiàn)_第1頁
第七章接口與實(shí)現(xiàn)_第2頁
第七章接口與實(shí)現(xiàn)_第3頁
第七章接口與實(shí)現(xiàn)_第4頁
第七章接口與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第七章接口與實(shí)現(xiàn)7.1接口

Java不支持多繼承性,即一個(gè)類只能有一個(gè)父類。單繼承性使得Java簡單,易于管理程序。為了克服單繼承的缺點(diǎn),Java使用了接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。接口的聲明與實(shí)現(xiàn)使用關(guān)鍵字interface來定義一個(gè)接口。接口的定義和類的定義很相似,分為接口的聲明和接口體。1.接口的聲明

interface接口的名字

2.接口體接口體中只進(jìn)行方法的聲明,不許提供方法的實(shí)現(xiàn),所以,方法的定義沒有方法體,且用分號(hào)“;”結(jié)尾。如:interfacePrintable{finalintMAX=100;voidadd();floatsum(floatx,floaty);}

3.接口的實(shí)現(xiàn)

一個(gè)類通過使用關(guān)鍵字implements聲明自己實(shí)現(xiàn)一個(gè)或多個(gè)接口。如果使用多個(gè)接口,用逗號(hào)隔開接口名。如:

classAimplementsPrintable,AddableclassDogextendsAnimalimplements

Eatable,Sleepable

如果一個(gè)類使用了某個(gè)接口,那么這個(gè)類必須實(shí)現(xiàn)該接口的所有方法,即為這些方法提供方法體。需要注意的是在類中實(shí)現(xiàn)接口的方法時(shí),方法的名字、返回類型、參數(shù)個(gè)數(shù)及類型必須與接口中的完全一致。

特別要注意的是接口中的方法被默認(rèn)是public的,所以類在實(shí)現(xiàn)接口方法時(shí)一定要用public來修飾。如果接口的方法的返回類型如果不是void的,那么在類中實(shí)現(xiàn)該接口方法時(shí),方法體至少要有一個(gè)return語句。如果是void型,方法體除了兩個(gè)大括號(hào)外,也可以沒有任何語句。

Java為我們提供的接口都在相應(yīng)的包中,通過引入包可以使用Java提供的接口。也可以自己定義接口,一個(gè)java源文件就是由類和接口組成的。例子interfaceComputable{intMAX=100;

int

f(intx);}classChinaimplementsComputable{intnumber;publicint

f(intx)//不要忘記public關(guān)鍵字

{intsum=0;

for(inti=1;i<=x;i++){sum=sum+i;}returnsum;}}classJapanimplementsComputable{intnumber;publicint

f(intx){return66+x;}}publicclassExample5_12{publicstaticvoidmain(String

args[]){Chinazhang;Japanhenlu;

zhang=newChina();

henlu=newJapan();

zhang.number=991898+Computable.MAX;

henlu.number=941448+Computable.MAX;

System.out.println("number:"+zhang.number+"求和"+zhang.f(100));

System.out.println("number:"+henlu.number+"求和"+henlu.f(100));}}

注:如果一個(gè)類聲明實(shí)現(xiàn)一個(gè)接口,但沒有實(shí)現(xiàn)接口中的所有方法,那么這個(gè)類必須是abstract類。interfaceComputable{intMAX=100;voidspeak(Strings);

int

f(intx);}abstractclassChinaimplementsComputable{publicint

f(intx){intsum=0;

for(inti=1;i<=x;i++){sum=sum+i;}returnsum;}}7.3理解接口

接口的思想在于它可以增加很多類都需要實(shí)現(xiàn)的功能,使用相同的接口類不一定有繼承關(guān)系。同一個(gè)類也可以實(shí)現(xiàn)多個(gè)接口。接口只關(guān)心功能,并不關(guān)心功能的具體實(shí)現(xiàn)。例子13interface收費(fèi){publicvoid收取費(fèi)用();}interface調(diào)節(jié)溫度{publicvoidcontrolTemperature();}class公共汽車implements收費(fèi){publicvoid收取費(fèi)用(){System.out.println(“公共汽車:一元/張,不計(jì)算公里數(shù)");}}class出租車implements收費(fèi),調(diào)節(jié)溫度{publicvoid收取費(fèi)用(){System.out.println(“出租車:1.60元/公里,起價(jià)3公里");}publicvoidcontrolTemperature(){System.out.println("安裝了Hair空調(diào)");}}class電影院implements收費(fèi),調(diào)節(jié)溫度{publicvoid收取費(fèi)用(){System.out.println("電影院:門票,十元/張");}publicvoidcontrolTemperature(){System.out.println("安裝了中央空調(diào)");}}classExample5_13{publicstaticvoidmain(String

args[]){公共汽車七路=new公共汽車();

出租車天宇=new出租車();

電影院紅星=new電影院();

七路.收取費(fèi)用();

天宇.收取費(fèi)用();

紅星.收取費(fèi)用();

天宇.controlTemperature();

紅星.controlTemperature();}}7.5接口回調(diào)接口回調(diào)是指可以把實(shí)現(xiàn)某一接口的類創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口的方法。例14interfaceShowMessage{void顯示商標(biāo)(Strings);}classTVimplementsShowMessage{publicvoid顯示商標(biāo)(Strings){System.out.println(s);}}classPCimplementsShowMessage{publicvoid顯示商標(biāo)(Strings){System.out.println(s);}}publicclassExample5_14{publicstaticvoidmain(String

args[]){

ShowMessage

sm;

sm=newTV();sm.顯示商標(biāo)("長城牌電視機(jī)");

sm=newPC();sm.顯示商標(biāo)("聯(lián)想奔月5008PC機(jī)");}}擴(kuò)展例子1interfaceComputerable{publicdouble求面積();}class梯形implementsComputerable{doublea,b,h;

梯形(doublea,double

b,doubleh){this.a=a;

this.b=b;

this.h=h;}publicdouble求面積(){return((1/2.0)*(a+b)*h);}}class圓形implementsComputerable{doubler;

圓形(doubler){this.r=r;}publicdouble求面積(){return(3.14*r*r);}}class堆{Computerable

底;double高;

堆(Computerable

底,double高){this.底=底;this.高=高;}void換底(Computerable

底){this.底=底;}publicdouble求體積(){return(底.求面積()*高)/3.0;}}publicclassExample{publicstaticvoidmain(String

args[]){堆zui;

Computerablebottom;bottom=new梯形(2.0,7.0,10.7);

System.out.println("梯形的面積"+bottom.求面積());

zui=new堆(bottom,30);

System.out.println(“梯形底的堆的體積”+zui.求體積());bottom=new圓形(10);

System.out.println("半徑是10的圓的面積"+bottom.

求面積());

zui.換底(bottom);

System.out.println(“圓形底的堆的體積”+zui.求體積());}}7.6接口與多態(tài)

當(dāng)把實(shí)現(xiàn)接口的類的實(shí)例的引用賦值給接口變量后,該接口變量可以回調(diào)類實(shí)現(xiàn)的接口方法。

接口產(chǎn)生的多態(tài)是指不同的類在實(shí)現(xiàn)同一個(gè)接口時(shí)可能具有不同的實(shí)現(xiàn)方式,那么接口變量在回調(diào)接口方法時(shí)就可能具有多種形態(tài)。多態(tài)的使用interface

abstractintf();abstractintg();類A

intf(){…}intg(){…}類B

intf(){…}intg(){…}interface變量a所在的類

a.f();a.g();例子15Geometry.javapublicinterfaceGeometry//接口{publicabstractdoublegetArea();}Lader.javapublicclassLaderimplementsGeometry{doublea,b,h;

Lader(double

a,double

b,doubleh){this.a=a;this.b=b;this.h=h;}publicdoublegetArea(){return((1/2.0)*(a+b)*h);}}Circle.javapublicclassCircleimplementsGeometry{doubler;

Circle(doubler){this.r=r;}publicdoublegetArea(){return(3.14*r*r);}}

Cone.javapublicclassCone{Geometrybottom;//接口變量

doubleheight;Cone(Geometrybottom,doubleheight){this.bottom=bottom;

this.height=height;}voidchangeBottom(Geometrybottom){this.bottom=bottom;}publicdoublegetVolume(){return(bottom.getArea()*height)/3.0;}}Example5_15.javapublicclassExample5_15{publicstaticvoidmain(String

args[]){Conezui;Geometrytuxing;//接口變量

tuxing=newLader(2.0,7.0,10.7);

System.out.println("梯形的面積"+tuxing.getArea());

zui=newCone(tuxing,30);

System.out.println("梯形底的錐的體積"+zui.getVolume());

tuxing=newCircle(10);

System.out.println("半徑是10的圓的面積"+tuxing.getArea());

zui.changeBottom(tuxing);

System.out.println("圓形底的錐的體積"+zui.getVolume());}}7.7接口做參數(shù)一個(gè)方法的參數(shù)是接口類型,就可以將任何實(shí)現(xiàn)該接口的類的對(duì)象的引用傳遞給該接口參數(shù),接口參數(shù)就可以回調(diào)類實(shí)現(xiàn)的接口方法。例子16interfaceshowLetter

{voidlistLetter();}classGreeceimplementsshowLetter{publicvoidlistLetter(){for(charc='α';c<='ω';c++)

System.out.print(""+c);}}classEnglishimplements

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論