




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第七章接口與實現(xiàn)7.1接口
Java不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java簡單,易于管理程序。為了克服單繼承的缺點,Java使用了接口,一個類可以實現(xiàn)多個接口。接口的聲明與實現(xiàn)使用關鍵字interface來定義一個接口。接口的定義和類的定義很相似,分為接口的聲明和接口體。1.接口的聲明
interface接口的名字
2.接口體接口體中只進行方法的聲明,不許提供方法的實現(xiàn),所以,方法的定義沒有方法體,且用分號“;”結尾。如:interfacePrintable{finalintMAX=100;voidadd();floatsum(floatx,floaty);}
3.接口的實現(xiàn)
一個類通過使用關鍵字implements聲明自己實現(xiàn)一個或多個接口。如果使用多個接口,用逗號隔開接口名。如:
classAimplementsPrintable,AddableclassDogextendsAnimalimplements
Eatable,Sleepable
如果一個類使用了某個接口,那么這個類必須實現(xiàn)該接口的所有方法,即為這些方法提供方法體。需要注意的是在類中實現(xiàn)接口的方法時,方法的名字、返回類型、參數(shù)個數(shù)及類型必須與接口中的完全一致。
特別要注意的是接口中的方法被默認是public的,所以類在實現(xiàn)接口方法時一定要用public來修飾。如果接口的方法的返回類型如果不是void的,那么在類中實現(xiàn)該接口方法時,方法體至少要有一個return語句。如果是void型,方法體除了兩個大括號外,也可以沒有任何語句。
Java為我們提供的接口都在相應的包中,通過引入包可以使用Java提供的接口。也可以自己定義接口,一個java源文件就是由類和接口組成的。例子interfaceComputable{intMAX=100;
int
f(intx);}classChinaimplementsComputable{intnumber;publicint
f(intx)//不要忘記public關鍵字
{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));}}
注:如果一個類聲明實現(xiàn)一個接口,但沒有實現(xiàn)接口中的所有方法,那么這個類必須是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理解接口
接口的思想在于它可以增加很多類都需要實現(xiàn)的功能,使用相同的接口類不一定有繼承關系。同一個類也可以實現(xiàn)多個接口。接口只關心功能,并不關心功能的具體實現(xiàn)。例子13interface收費{publicvoid收取費用();}interface調節(jié)溫度{publicvoidcontrolTemperature();}class公共汽車implements收費{publicvoid收取費用(){System.out.println(“公共汽車:一元/張,不計算公里數(shù)");}}class出租車implements收費,調節(jié)溫度{publicvoid收取費用(){System.out.println(“出租車:1.60元/公里,起價3公里");}publicvoidcontrolTemperature(){System.out.println("安裝了Hair空調");}}class電影院implements收費,調節(jié)溫度{publicvoid收取費用(){System.out.println("電影院:門票,十元/張");}publicvoidcontrolTemperature(){System.out.println("安裝了中央空調");}}classExample5_13{publicstaticvoidmain(String
args[]){公共汽車七路=new公共汽車();
出租車天宇=new出租車();
電影院紅星=new電影院();
七路.收取費用();
天宇.收取費用();
紅星.收取費用();
天宇.controlTemperature();
紅星.controlTemperature();}}7.5接口回調接口回調是指可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中。那么該接口變量就可以調用被類實現(xiàn)的接口中的方法。實際上,當接口變量調用被類實現(xiàn)的接口中的方法時,就是通知相應的對象調用接口的方法。例14interfaceShowMessage{void顯示商標(Strings);}classTVimplementsShowMessage{publicvoid顯示商標(Strings){System.out.println(s);}}classPCimplementsShowMessage{publicvoid顯示商標(Strings){System.out.println(s);}}publicclassExample5_14{publicstaticvoidmain(String
args[]){
ShowMessage
sm;
sm=newTV();sm.顯示商標("長城牌電視機");
sm=newPC();sm.顯示商標("聯(lián)想奔月5008PC機");}}擴展例子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)
當把實現(xiàn)接口的類的實例的引用賦值給接口變量后,該接口變量可以回調類實現(xiàn)的接口方法。
接口產(chǎn)生的多態(tài)是指不同的類在實現(xiàn)同一個接口時可能具有不同的實現(xiàn)方式,那么接口變量在回調接口方法時就可能具有多種形態(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ù)一個方法的參數(shù)是接口類型,就可以將任何實現(xiàn)該接口的類的對象的引用傳遞給該接口參數(shù),接口參數(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 秦皇島市人民醫(yī)院血液檢驗危急值報告流程考核
- 2025年杭州拱墅區(qū)長慶潮鳴街道社區(qū)衛(wèi)生服務中心招聘編外聘用人員1人模擬試卷有答案詳解
- 衡水市中醫(yī)院耳鼻喉科手術配合考核
- 2025中心醫(yī)院運動平板試驗資格認證
- 衡水市人民醫(yī)院急診放射檢查考核
- 保定市人民醫(yī)院感染性休克集束化治療考核
- 邢臺市中醫(yī)院環(huán)氧乙烷滅菌考核
- 天津市人民醫(yī)院液體管理技術考核
- 滄州市中醫(yī)院盆腔器官脫垂手術操作資格認證
- 張家口市人民醫(yī)院埋線技術操作準入考核
- 石墨化工藝基礎知識培訓
- 如何落實高質量臨床護理服務
- 2025年四川政治理論水平試題及答案
- 2025考研政治真題試卷與參考答案
- 刑事案件二次審判會見筆錄范文
- 2025年福建省職業(yè)技能鑒定考試(勞動關系協(xié)調員·一級/高級技師)歷年參考題庫含答案詳解(5卷)
- 馬鈴薯水肥一體化技術
- 城鎮(zhèn)排水管道檢測與評估技術規(guī)程
- GB/T 18445-2025水泥基滲透結晶型防水材料
- 成都工勤轉管理辦法
- 基于深度學習的心電圖診斷心律失常的研究
評論
0/150
提交評論