




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
接口、抽象類、Map類抽象類抽象類是指在類中定義方法,但是并不去實(shí)現(xiàn)它,而在它的子類中去具體的實(shí)現(xiàn)。定義的抽象方法不過是一個(gè)方法占位符。繼承抽象類的子類必須實(shí)現(xiàn)父類的抽象方法,除非子類也被定義成一個(gè)抽象類。定義修飾符abstract類名{//類體}修飾符abstract返回值類型方法名();//抽象類的聲明abstractclassAnimal{Stringtype;Stringname;intage;intweight;voideat(){System.out.println("動(dòng)物愛吃飯");}abstractvoidbreath();voidsleep(){System.out.println("動(dòng)物在睡覺");}}//Tiger繼承抽象類AnimalclassTigerextendsAnimal{StringtigerType;Stringfrom;voidtigerRun(){System.out.println("老虎在奔跑");}voidbreath(){System.out.println("老虎是用肺呼吸的");}}classFishextendsAnimal{StringfishType;voidswim(){System.out.println("魚在游泳");}voidbreath(){System.out.println("魚是用腮呼吸的");}}程序把Animal定義為抽象類,里面的breath方法被定義為抽象方法,而后面定義的Animal的子類Tiger和Fish都實(shí)現(xiàn)了breath方法。抽象類的使用定義完抽象類后,就可以使用它。但是抽象類和普通類不同,抽象類不可以實(shí)例化,如語句Animalanimal=newAnimal();是無法通過編譯的,但是可以創(chuàng)建抽象類的對(duì)象變量,只是這個(gè)變量只能用來指向它的非抽象子類對(duì)象。示例如下。publicclassUseAbstract{publicstaticvoidmain(String[]args){Animalanimal1=newFish();animal1.breath();Animalanimal2=newTiger();animal2.breath();}}程序中定義了兩個(gè)Animal對(duì)象變量,一個(gè)存放Fish對(duì)象,另一個(gè)存放Tiger對(duì)象,分別調(diào)用這兩個(gè)對(duì)象的breath方法。由于根本不可能構(gòu)建出Animal對(duì)象,所以存放的對(duì)象仍然是Tiger對(duì)象,它會(huì)動(dòng)態(tài)綁定正確的方法進(jìn)行調(diào)用。需要注意的是,盡管animal存放的是Tiger對(duì)象或是Fish對(duì)象,但是不能直接調(diào)用這些子類的方法,語句animal.swim;和animal2.tigerRun();都是不正確的。調(diào)用這項(xiàng)方法的時(shí)候仍然需要進(jìn)行類型轉(zhuǎn)換,正確的使用方法如下。((Fish)animal1).swim();((Tiger)animal2).tigerRun();接口接口是Java提供的一項(xiàng)非常重要的結(jié)構(gòu)。它定義了一系列的抽象方法和常量,形成一個(gè)屬性集合。接口定義完成后任何類都可以實(shí)現(xiàn)接口,而且一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。實(shí)現(xiàn)接口的類必須實(shí)現(xiàn)接口中定義的抽象方法,具體實(shí)現(xiàn)細(xì)節(jié)由類自己定義。可以說接口定義了類的框架,它實(shí)際上是一種完全的抽象類。接口的定義了解什么是接口后,現(xiàn)在就來定義接口。接口的定義跟類的定義十分相似,只是使用的關(guān)鍵字不同,類的定義使用的關(guān)鍵字是class,而接口使用的關(guān)鍵字是interface。接口定義的形式如下。修飾符interface接口名{//接口內(nèi)容//聲明變量類型變量名;……//聲明方法返回值類型方法名();……}定義接口注意事項(xiàng)接口的修飾符只能為默認(rèn)的(無修飾符)或者public。當(dāng)修飾符為默認(rèn)時(shí),接口是包可見的,在接口所在的包之外的類不能使用接口。修飾符為public時(shí),任何類都可以使用該接口。接口的名字應(yīng)該符合Java對(duì)標(biāo)識(shí)符的規(guī)定。接口內(nèi)可以聲明變量,接口內(nèi)的變量被自動(dòng)設(shè)置為共有的、靜態(tài)的、最終的字段。接口定義的方法都為抽象,它們被自動(dòng)地設(shè)置為public。接口也被保存為.java文件,文件名與類名相同。在接口中聲明一個(gè)變量。inti;它的實(shí)際效果如下。publicstaticfinali;在接口定義時(shí)可以把它明確地定義為publicstaticfinal,但是因?yàn)樽侄螘?huì)被自動(dòng)地設(shè)置為這些類型,所以不建議再寫出。下面是一個(gè)完整的接口的定義。publicinterfaceAnimal{//接口中的變量intBIG_TYPE=5;//用接口聲明方法,只有方法的聲明沒有具體實(shí)現(xiàn)voidsleep();voideat();voidbreath();}接口的實(shí)現(xiàn)接口的實(shí)現(xiàn)是指具體實(shí)現(xiàn)接口的類。接口的聲明僅僅給出了抽象方法,相當(dāng)于事先定義了程序的框架。實(shí)現(xiàn)接口的類必須要實(shí)現(xiàn)接口中定義的方法。實(shí)現(xiàn)接口的形式如下:class類名implements接口1,接口2{方法1(){//方法體}方法2(){//方法體}}實(shí)現(xiàn)接口注意事項(xiàng)由關(guān)鍵字表示實(shí)現(xiàn)的接口,多個(gè)接口之間用逗號(hào)隔開。實(shí)現(xiàn)接口需要注意以下幾點(diǎn)。如果實(shí)現(xiàn)接口的類不是抽象類,它必須實(shí)現(xiàn)接口中定義的所有的方法。如果該類為抽象類,在它的子類甚至子類的子類中要實(shí)現(xiàn)接口中定義的方法。實(shí)現(xiàn)接口的方法時(shí)必須使用相同的方法名和參數(shù)列表。實(shí)現(xiàn)接口類中的方法必須被聲明為public,因?yàn)樵诮涌谥械姆椒ǘ急欢x為public,根據(jù)繼承的原則,訪問范圍只能放大,不能縮小。publicclassTigerimplementsAnimal{//實(shí)現(xiàn)breath方法publicvoidbreath(){System.out.println("Thetigerbreath");}//實(shí)現(xiàn)eat方法publicvoideat(){System.out.println("Thetigereat");}//實(shí)現(xiàn)sleep方法publicvoidsleep(){System.out.println("Thetigersleep");}publicstaticvoidmain(String[]args){Tigertiger=newTiger();tiger.breath();tiger.eat();tiger.sleep();}}接口之間也可以有繼承關(guān)系。繼承接口的接口擁有它的父接口的方法,它還可以定義自己的方法,實(shí)現(xiàn)這個(gè)子接口的類。要實(shí)現(xiàn)所有這些方法,示例如下,使用上面的Animal動(dòng)物接口,然后定義一個(gè)子接口哺乳動(dòng)物Mammal。//子接口publicinterfaceMammalextendsAnimal{voidrun();}如果類要實(shí)現(xiàn)Mammal,它必須實(shí)現(xiàn)兩個(gè)接口中的所有方法,下面是重新定義的類Tiger。publicclassTigerimplementsMammal{//實(shí)現(xiàn)breath方法publicvoidbreath(){System.out.println("Thetigerbreath");}//實(shí)現(xiàn)eat方法publicvoideat(){System.out.println("Thetigereat");}//實(shí)現(xiàn)sleep方法publicvoidsleep(){System.out.println("Thetigersleep");}//實(shí)現(xiàn)run方法publicvoidrun(){System.out.println("Thetigerrun");}publicstaticvoidmain(String[]args){Tigertiger=newTiger();tiger.breath();tiger.eat();tiger.sleep();tiger.run();}}接口的應(yīng)用跟抽象類一樣,接口也不可以實(shí)例化,但是可以聲明接口類型的變量,它的值必須是實(shí)現(xiàn)了該接口的類的對(duì)象。例如:Animaltiger=newTiger();通過tiger,只能調(diào)用Animal中定義的方法eat、sleep、breath,如果使用語句Mammaltiger=newTiger();,就可以調(diào)用在Mammal接口中定義的run方法了。當(dāng)然,通過強(qiáng)制類型轉(zhuǎn)換可以調(diào)用所有的方法,示例程序如下,首先看兩個(gè)接口的定義,其中Mammal接口繼承了Animal接口。interfaceAnimal{intBIG_TYPE=5;voidsleep();voideat();voidbreath();}interfaceMammalextendsAnimal{voidrun();}classTigerimplementsMammal{Stringname;publicTiger(Stringnm){name=nm;}publicvoidbreath(){System.out.println(name+"Thetigerbreath");}publicvoideat(){System.out.println(name+"Thetigereat");}publicvoidsleep(){System.out.println(name+"Thetigersleep");}publicvoidrun(){System.out.println(name+"Thetigerrun");}}classFishimplementsAnimal{Stringname;publicFish(Stringnm){name=nm;}publicvoidbreath(){System.out.println(name+"用腮呼吸");}publicvoideat(){System.out.println(name+"在吃水草");}publicvoidsleep(){System.out.println(name+"在睜著眼睛睡覺");}}publicclassAnimalDemo{publicstaticvoidmain(String[]args){//Animal接口,F(xiàn)ish對(duì)象Animalfish=newFish("大鯊魚");//Animal接口,Tiger對(duì)象Animaltiger1=newTiger("東北虎");//Mammal接口,Tiger對(duì)象Mammaltiger2=newTiger("華南虎");//使用fish調(diào)用各種方法fish.breath();fish.eat();fish.sleep();//使用tiger1調(diào)用各種方法tiger1.breath();tiger1.eat();tiger1.sleep();//調(diào)用run方法,需要進(jìn)行類型轉(zhuǎn)換((Tiger)tiger1).run();//使用tiger2調(diào)用各種方法tiger2.breath();tiger2.eat();tiger2.sleep();tiger2.run();}}這個(gè)程序主要是展示通過接口來實(shí)現(xiàn)多態(tài)的一種方式。接口變量來存放接口實(shí)現(xiàn)類的對(duì)象,通過它來調(diào)用方法的時(shí)候,程序會(huì)調(diào)用“合適”的方法,過程跟繼承中講到的動(dòng)態(tài)綁定很相似。接口的另一個(gè)重要應(yīng)用是用它來創(chuàng)建常量組,例如要用int類型的一組數(shù)來表示星期,而且這些天都是固定不需要改變的,就可以通過接口來實(shí)現(xiàn)。//用接口來存放變量interfaceWeekDays{intMONDAY=1;intTUESDAY=2;intWEDNESDAY=3;intTHURSDAY=4;intFRIDAY=5;intSATURDAY=6;intSUNDAY=7;}classTimeimplementsWeekDays{voidprint(){System.out.println("MONDAY="+MONDAY);System.out.println("TUESDAY="+TUESDAY);System.out.println("WEDNESDAY="+WEDNESDAY);System.out.println("THURSDAY="+THURSDAY);System.out.println("FRIDAY="+FRIDAY);System.out.println("SATURDAY="+SATURDAY);System.out.println("SUNDAY="+SUNDAY);}}publicclassWeekDayDemoimplementsWeekDays{publicstaticvoidmain(String[]args){Time
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025水庫疏浚工程合同
- 微商有償代理合同協(xié)議
- 德祐地產(chǎn)加盟合同協(xié)議
- 2025屆畢業(yè)生勞動(dòng)合同模板
- 2025集體土地使用權(quán)轉(zhuǎn)讓合同模板
- 商品電動(dòng)轎車出售合同協(xié)議
- 2025企業(yè)常見合同范本
- 樓道下水改造合同協(xié)議
- 2025試用期內(nèi)解除勞動(dòng)合同協(xié)議書樣本
- 2025廣告投放合同模板
- 交通出行共享單車管理優(yōu)化策略
- 全球視野下商業(yè)長期護(hù)理保險(xiǎn)發(fā)展研究報(bào)告-中再壽20241214
- 學(xué)校領(lǐng)導(dǎo)班子素質(zhì)培訓(xùn)計(jì)劃和措施
- 《礦漿管道施工組織設(shè)計(jì)》
- 2024年河北高中學(xué)業(yè)水平合格性考試生物試卷真題(含答案詳解)
- 消防器材使用技能培訓(xùn)
- GB/T 22671-2024外轉(zhuǎn)子電動(dòng)機(jī)試驗(yàn)方法
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)
- 部編版語文四年級(jí)下冊(cè)第四單元大單元作業(yè)設(shè)計(jì)
- 金融大數(shù)據(jù)銀行項(xiàng)目使用手冊(cè)
- 人工智能訓(xùn)練師(中級(jí)數(shù)據(jù)標(biāo)注員)理論考試題庫(含答案)
評(píng)論
0/150
提交評(píng)論