java初級及高級講解ppt - 7.抽象類、接口_第1頁
java初級及高級講解ppt - 7.抽象類、接口_第2頁
java初級及高級講解ppt - 7.抽象類、接口_第3頁
java初級及高級講解ppt - 7.抽象類、接口_第4頁
java初級及高級講解ppt - 7.抽象類、接口_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第七章抽象類、接口本章目標(biāo)抽象類接口內(nèi)部類枚舉類型抽象類(1)在定義Java方法時可以只給出方法頭,而不必給出方法體、即方法實現(xiàn)的細(xì)節(jié),這樣的方法被稱為抽象方法。抽象方法必須使用關(guān)鍵字abstract修飾,包含抽象方法的類必須聲明為抽象類。Java語言規(guī)定,子類必須實現(xiàn)其父類中的所有抽象方法,否則該子類也只能聲明為抽象類。抽象類不能被實例化抽象類舉例publicabstractclassQQ{privateintaccount;publicvoidsetAccount(intaccount){this.account=account;}publicintgetAccount(){ returnaccount;}publicabstractvoidshow();}publicclassQQFarmextendsQQ{privateStringname;publicvoidsetName(Stringname){ =name;}publicStringgetName(){ returnname;}publicvoidshow(){//重寫方法

System.out.println(“輸入用戶名,密碼進入QQ空間進入農(nóng)場");}}抽象類舉例publicclassTest{publicstaticvoidmain(String[]args){QQa=newQQFarm();a.setAccount(20000);a.show();}}抽象類抽象類主要是通過繼承、再由其子類發(fā)揮作用的,其作用包括兩方面:代碼重用規(guī)劃其他特性:抽象類中可以不包含抽象方法;子類中可以不全部實現(xiàn)抽象父類中的抽象方法,但此時子類也只能聲明為抽象類;父類不是抽象類,但在子類中可以添加抽象方法,但子類需聲明為抽象類;抽象類中可以聲明static屬性和方法;練習(xí)參照前述例程,編寫自己的抽象類和應(yīng)用 程序,測試并體會抽象類相關(guān)特性。接口(1)接口(interface)是抽象方法和常量值的定義的集合。從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。接口(2)接口中定義的屬性必須是publicstaticfinal

的,而接口中定義的方法則必須是public abstract的,因此這些修飾符可以部分或全部省略:和繼承關(guān)系類似,Java類可以“實現(xiàn)”接口,且接口和實現(xiàn)類之間也存在多態(tài)性。[<modifier>]class<name>[extends<superclass>] [implements<interface>[,<interface>]*]{declarations>*}publicinterfaceRunner{publicstaticfinalintid=1;publicabstractvoidstart();publicabstractvoidrun();publicabstractvoidstop();}publicinterfaceRunner{intid=1;voidstart();voidrun();voidstop();}//兩者相等接口應(yīng)用舉例publicclassPersonimplementsRunner{publicvoidstart(){ System.out.println("彎腰、蹬腿、咬牙、瞪眼、開跑");}publicvoidrun(){ System.out.println("擺動手臂、維持直線方向");}publicvoidstop(){ System.out.println("減速直至停止、喝水");}}publicclassTest{publicstaticvoidmain(String[]args){Runnerr=newPerson();r.start();r.run();r.stop();}}接口的多重實現(xiàn)interfaceRunner{ publicvoidrun();}interfaceSwimmer{ publicvoidswim();}abstractclassAnimal{ publicabstractvoideat();}classPersonextendsAnimalimplementsRunner,Swimmer{ publicvoidrun(){ System.out.println("Iamrunning,tothesea!"); } publicvoidswim(){ System.out.println("Iamswimming,totheisland!"); } publicvoideat(){ System.out.println("Iameating!"); }}接口的多重實現(xiàn)publicclassTest{publicstaticvoidmain(Stringargs[]){Testt=newTest();Personp=newPerson();t.m1(p);t.m2(p);t.m3(p);}publicvoidm1(Runnerf){ f.run();}publicvoidm2(Swimmers){ s.swim();}publicvoidm3(Animala){ a.eat();}}接口間的繼承interfaceA{ publicvoidma();}interfaceB{ publicintmb(inti);}interfaceCextendsA,B{ publicStringmc();}classDimplementsC{publicvoidma(){ System.out.println("Implementsmethodma()!");}publicintmb(inti){ return2000+i;}publicStringmc(){ return"Hello!";}}接口特性總結(jié)通過接口可以實現(xiàn)不相關(guān)類的相同行為, 而不需要考慮這些類之間的層次關(guān)系;接口可以被多重實現(xiàn);接口可以繼承其它的接口,并添加新的屬 性和抽象方法。接口間支持多重繼承。練習(xí)定義自己的接口、實現(xiàn)類和測試程序,體 會接口的功能和用法嵌套類Java語言支持類的嵌套定義,即允許將一個類定義在其他類的內(nèi)部,其中內(nèi)層的類被稱為嵌套類(NestedClass)。嵌套類可以分為兩種:靜態(tài)嵌套類(StaticNestedClass):使用static修飾的嵌套類;內(nèi)部類(InnerClass):非static的嵌套類。publicclassA{…privateclassB{//內(nèi)部類

…}publicstaticclassC{//靜態(tài)嵌套類

…}}內(nèi)部類內(nèi)部類又可分為三種情況:1.普通的內(nèi)部類:在Java類中、方法或語句塊的外部定義的非static類。2.局部內(nèi)部類:也稱局部類(LocalClass),定義在方法或語句塊中的類。3.匿名內(nèi)部類:也稱匿名類(AnonymousClass),定義在方法或語句塊中,該類沒有名字、只能在其所在之處使用一次。內(nèi)部類內(nèi)部類與其所在的外層類之間存在著邏輯上的依賴關(guān)系——內(nèi)部類的對象不能單獨存在,它必須依賴一個其外層類的對象;在內(nèi)部類中可以直接訪問其外層類中的成員、包括屬性和方法,即使這些屬性和方法是private的。內(nèi)部類可以聲明為抽象類,因此可以被其它的內(nèi)部類繼承。也可以聲明為final的。和外層類不同,內(nèi)部類可以聲明為private或protected。使用內(nèi)部類(1)publicclassA{privateints;publicclassB{publicvoidmb(){s=100;//p3System.out.println("在內(nèi)部類B中s="+s);}}publicvoidma(){Bi=newB();//p2i.mb();}}publicclassTestInner{publicstaticvoidmain(Stringargs[]){Ao=newA();//p1o.ma();}}使用內(nèi)部類(2)使用內(nèi)部類(3)在外部使用其他類中的內(nèi)部類時,應(yīng)指明其完整層次,并顯式建立對象間的依賴關(guān)系。publicclassA{privateints;publicclassB{publicvoidmb(){ System.out.println(s);}}}publicclassTestInner2{publicstaticvoidmain(String[]args){Aa=newA();//創(chuàng)建一個依賴于a而存在的bA.Bb=a.newB();b.mb();}}使用內(nèi)部類(4)內(nèi)部類中出現(xiàn)變量命名沖突時,可以使用內(nèi)部類對象的特殊屬性"<外層類名>.this"來訪問其所依賴外層類對象的成員。classA{privateints=111;publicclassB{privateints=222;publicvoidmb(ints){System.out.println(s);//局部變量sSystem.out.println(this.s);//內(nèi)部類對象的屬性sSystem.out.println(A.this.s);//外層類對象屬性s}}}publicclassTestInner3{publicstaticvoidmain(Stringargs[]){Aa=newA();A.Bb=a.newB();b.mb(333);}}枚舉類型JavaSE5.0開始,Java語言引入了一種新的引用數(shù)據(jù)結(jié)構(gòu)——枚舉(Enum)。Java語言中枚舉類型均自動繼承了java.lang.Enum類(該類繼承了Objec類)。枚舉類型使用一組常量值來表示特定的數(shù)據(jù)集合,該集合中數(shù)據(jù)的數(shù)目確定(通常較少),且這些數(shù)據(jù)只能取預(yù)先定義的值publicenumWeek{ MON,TUE,WED,THU,FRI,SAT,SUN}使用枚舉類型publicenumWeek{ MON,TUE,WED,THU,FRI,SAT,SUN}publicclassTestEnum{publicstaticvoidmain(String[]args){TestEnumte=newTestEnum();te.work(Week.SUN);}publicvoidwork(Weekday){if(day.equals(Week.SAT)){ System.out.println("購物!");}elseif(day.equals(Week.SUN)){ System.out.println("祈禱!");}else{ System.out.println("工作!");}}}組合使用枚舉類型與switch語句publicclassTestEnumInSwitch{publicstaticvoidmain(String[]args){TestEnumInSwitchteis=newTestEnumInSwitch();teis.work(Week.FRI);}publ

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論