![《類的繼承性》教學(xué)課件_第1頁](http://file4.renrendoc.com/view/544440bff8083401950e689dca7cc53f/544440bff8083401950e689dca7cc53f1.gif)
![《類的繼承性》教學(xué)課件_第2頁](http://file4.renrendoc.com/view/544440bff8083401950e689dca7cc53f/544440bff8083401950e689dca7cc53f2.gif)
![《類的繼承性》教學(xué)課件_第3頁](http://file4.renrendoc.com/view/544440bff8083401950e689dca7cc53f/544440bff8083401950e689dca7cc53f3.gif)
![《類的繼承性》教學(xué)課件_第4頁](http://file4.renrendoc.com/view/544440bff8083401950e689dca7cc53f/544440bff8083401950e689dca7cc53f4.gif)
![《類的繼承性》教學(xué)課件_第5頁](http://file4.renrendoc.com/view/544440bff8083401950e689dca7cc53f/544440bff8083401950e689dca7cc53f5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
《類的繼承性》幻燈片本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!《類的繼承性》幻燈片本課件PPT僅供大家學(xué)習(xí)使用《類的繼承性》教學(xué)課件《類的繼承性》教學(xué)課件《類的繼承性》教學(xué)課件《類的繼承性》教學(xué)課件訪問控制權(quán)限了解
訪問控制權(quán)限了解第3講面向?qū)ο缶幊獭哺呒壠车?講面向?qū)ο缶幊獭哺呒壠趁嫦驅(qū)ο缶幊獭哺灼持R回憶面向?qū)ο缶幊獭哺灼持R回憶主要內(nèi)容3.1繼承性3.2多態(tài)性3.3抽象類3.4接口3.5內(nèi)部類和匿名類3.1繼承的作用3.2子類對象的創(chuàng)立3.3在子類中訪問父類的成員3.4覆蓋父類的方法主要內(nèi)容3.1繼承性3.1繼承的作用繼承Person-name:String-age:String+getName():String+setName(Stringn):void+getAge():String+setAge(inta):voidStudent-name:String-age:String-school:String+getName():String+setName(Stringn):void+getAge():String+setAge(inta):void+getSchool():String+setSchool(Strings):void為什么引入繼承的特性?模仿人類的思維方式—人類的繼承性繼承Person-name:String+getNamPerson類classPerson{privateStringname;privateintage;publicStringgetName(){returnname;}
publicvoidsetName(Stringn){name=n;}publicintgetAge(){returnage;}publicvoidsetAge(inta){age=a;}}Student類classStudent{privateStringname;privateintage;privateStringschool;publicStringgetName(){returnname;}publicvoidsetName(Stringn){name=n;}publicintgetAge(){returnage;}publicvoidsetAge(inta){age=a;}publicStringgetSchool{returnschool;}publicvoidsetSchool(Strings){school=s;}}Person類Student類繼承為什么引入繼承的特性?模仿人類的思維方式—人類的繼承性2.程序的代碼重用性—少寫代碼繼承為什么引入繼承的特性?模仿人類的思維方式—人類的繼承性2繼承關(guān)系格式:class父類{……}class子類extends
父類{……}試驗!eXTdEMO1.JAVAeXTdEMO2.JAVA繼承關(guān)系格式:class父類試驗!eXTdEMO1.JAVQQ牧場的設(shè)計目的:了解在真實系統(tǒng)中進(jìn)展設(shè)計時如何進(jìn)展繼承層次的設(shè)計?QQ牧場的設(shè)計目的:了解在真實系統(tǒng)中進(jìn)展設(shè)計時如何進(jìn)展繼承層①找出對象的共同屬性和行為這個程序必須能夠在任何時候參加新類型的動物。首先要區(qū)分出所有動物都有的、抽象的共同特征,然后以這些共同特征設(shè)計出能夠讓所有動物加以擴(kuò)大的類??紤]:這6種動物有什么共同特點?這些類型有什么相關(guān)性?①找出對象的共同屬性和行為這個程序必須能夠在任何時①找出對象的共同屬性和行為5個實例變量: picture:動物JPEG圖像的名稱 food:此動物所吃的食物(meat/grass) hunger:代表饑餓程度的int值。會根據(jù)動物吃了多少食物而改變。 boundaries:代表動物活動范圍區(qū)域的長寬。 location:動物在活動區(qū)域中的位置。4個實例方法:
makeNoise():動物發(fā)出聲音的行為和程序。 eat():動物遇到食物時的行為程序。 sleep():睡眠的行為程序。 roam():不在進(jìn)食或睡眠時的行為程序。①找出對象的共同屬性和行為5個實例變量:②設(shè)計代表共同狀態(tài)與行為的類Animal-Stringpictual-Stringfood-inthunger-Positionboudaries-PositionlocationvoidmakeNoise()voideat()voidsleep()voidroam()LionCatTiggerHippoDogWolf②設(shè)計代表共同狀態(tài)與行為的類Animal-String③決定子類是否需要讓某項行為有特定的不同的運行方式Animal成員變量。。。。。。voidmakeNoise()voideat()voidsleep()voidroam()LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggerHippoDogWolf③決定子類是否需要讓某項行為有特定的不同的運行方式Anima③決定子類是否需要讓某項行為有特定的不同的運行方式Animal成員變量。。。。。。voidmakeNoise()voideat()voidsleep()voidroam()LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggervoidmakeNoise()voideat()DogvoidmakeNoise()voideat()HippovoidmakeNoise()voideat()WolfvoidmakeNoise()voideat()③決定子類是否需要讓某項行為有特定的不同的運行方式Anima④尋找更多抽象化的時機(jī)Animal成員變量。。。。。。voidmakeNoise()voideat()voidsleep()voidroam()LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggervoidmakeNoise()voideat()DogvoidmakeNoise()voideat()HippovoidmakeNoise()voideat()WolfvoidmakeNoise()voideat()④尋找更多抽象化的時機(jī)Animal成員變量voidm⑤完成類的繼承層次Animal。。。。。。。。。。。。LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggervoidmakeNoise()voideat()DogvoidmakeNoise()voideat()HippovoidmakeNoise()voideat()WolfvoidmakeNoise()voideat()Feline……roam()Canine……roam()⑤完成類的繼承層次Animal。。。。。。。。。。。。Lio⑤完成類的繼承層次④尋找更多抽象化的時機(jī)③決定子類是否需要讓某項行為有特定的不同的運行方式②設(shè)計代表共同狀態(tài)與行為的類如何進(jìn)展繼承層次的設(shè)計--自下而上的設(shè)計
①找出對象的共同屬性和行為⑤完成類的繼承層次④尋找更多抽象化的時機(jī)③決定子類是否需要讓子類對象調(diào)用成員的原那么AnimalmakeNoise()eat()sleep()roam()WolfvoidmakeNoise()voideat()Canine……roam()創(chuàng)建大野狼對象Wolfw=newWolf();調(diào)用大野狼的方法w.makeNoise();調(diào)用犬科的方法w.roam();調(diào)用動物的方法w.sleep()最低階原那么子類對象調(diào)用成員的原那么AnimalmakeNoise()W③添加子類的新成員②改造父類的成員①繼承父類的成員父類如何進(jìn)展子類設(shè)計--自上而下的設(shè)計
③添加子類的新成員②改造父類的成員①繼承父類的成員父類訪問控制權(quán)限了解
訪問控制權(quán)限了解③添加子類的新成員②改造父類的成員①繼承父類的成員父類如何進(jìn)展子類設(shè)計--自上而下的設(shè)計
③添加子類的新成員②改造父類的成員①繼承父類的成員父類子類對象的創(chuàng)立一、子類對象的實例化過程二、super的作用子類對象的創(chuàng)立一、子類對象的實例化過程子類的創(chuàng)立一、子類對象的實例化過程classPerson{ publicPerson()父類構(gòu)造〞);}}classStudent{ publicStudent()子類構(gòu)造〞);}}子類的創(chuàng)立一、子類對象的實例化過程子類對象的創(chuàng)立一、子類對象的實例化過程publicclassTestDemo11{ publicstaticvoidmain(Stringargs[]){
Studentstu=newStudent(); }}運行結(jié)果:
?子類對象的創(chuàng)立一、子類對象的實例化過程運行結(jié)果:?子類對象的創(chuàng)立一、子類對象的實例化過程1、先自動調(diào)用父類構(gòu)造函數(shù)〔父類中的無參構(gòu)造函數(shù)〕2、然后調(diào)用子類構(gòu)造函數(shù)注意:如果父類中有多個構(gòu)造方法時,如何才能調(diào)用父類中某個特定的構(gòu)造方法呢?其做法是在子類的構(gòu)造方法中通過super〔…〕來調(diào)用父類特定的構(gòu)造方法。子類對象的創(chuàng)立一、子類對象的實例化過程創(chuàng)立子類二、super()、super(……)classPerson{ privateStringname; privateintage; publicPerson() {調(diào)用Person類的無參構(gòu)造方法〞);} publicPeron(Stringname,intage)調(diào)用了Person類的有參構(gòu)造方法〞); =name; this.age=age;} publicvoidshow() {姓名:〞+name+〞年齡:〞+age);} }創(chuàng)立子類二、super()、super(……)子類對象的創(chuàng)立classStudentextendsPerson{ privateStringdepartment; publicStudent()無參構(gòu)造〞);} publicStudent(Stringname,intage,Stringdep) {super(name,age); department=dep;我是〞+department+〞的學(xué)生〞);有參構(gòu)造〞);}}子類對象的創(chuàng)立classStudentextendsP子類對象的創(chuàng)立publicclassTestDemo1{ publicstaticvoidmain(Stringargs[]){ Studentstu1=newStudent(); Studentstu2=newStudent(“李四〞,23,〞計算機(jī)系〞); stu1.show(); stu2.show(); }}子類對象的創(chuàng)立publicclassTestDemo1{子類對象的創(chuàng)立省略紅色字體super(name,age),父類中的構(gòu)造方法哪個會被調(diào)用?子類構(gòu)造方法中調(diào)用父類構(gòu)造方法的super語句位置有沒有限制?如果父類中只定義了有參的構(gòu)造方法,而子類的構(gòu)造方法中并沒有顯式的用super〔〕來調(diào)用父類中特定的構(gòu)造方法,程序此時會有問題嗎?找出this和super的一樣點和不同點。思考??!!找出繼承中構(gòu)造方法的調(diào)用規(guī)那么子類對象的創(chuàng)立省略紅色字體super(name,age),父成員變量的隱藏和方法的覆寫〔1〕當(dāng)在子類中定義的成員變量和父類中的成員變量同名時,此時稱子類的成員變量隱藏了父類的成員變量。改造父類的成員〔2〕當(dāng)子類中定義了一個方法,并且這個方法的名字,返回類型,參數(shù)個數(shù)以及類型和父類的某個方法完全一樣時,父類的這個方法將被隱藏,這時我們說重寫了父類的方法。子類通過成員變量的隱藏和方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。成員變量的隱藏和方法的覆寫〔1〕當(dāng)在子類中定義的成員變量和父成員變量的隱藏和方法的覆寫例如下面的這段程序就是這樣的情況:classSuperClass{//父類
inty;
voidsetY(){y=0;}}classSubClassextendsSuperClass{inty;//父類變量y被隱藏
voidsetY(){//重寫父類的方法setY()y=1;}}publicTestDemo3{publicstaticvoidmain(Stringargs[]){
SubClassss=newSubClass();
ss.setY();}}成員變量的隱藏和方法的覆寫例如下面的這段程序就是這樣的情況:
子類在隱藏了父類的成員變量或重寫了父類的方法后,常常還要用到父類的成員變量,或在重寫的方法中使用父類中被重寫的方法以簡化代碼的編寫,這時就要訪問父類的成員變量或調(diào)用父類的方法,Java中通過super來實現(xiàn)對父類成員的訪問。this用來引用當(dāng)前對象,與this類似,super用來引用當(dāng)前對象的父類。super的使用可以分為下面三種情況:
1)用來訪問父類被隱藏的成員變量,如:
super.y2)用來調(diào)用父類中被重寫的方法,如:
super.setY()
3)用來調(diào)用父類的構(gòu)造方法,如:
super([paramlist]);成員變量的隱藏和方法的覆寫思考:方法的重載與覆寫非常類似,找出它們的區(qū)別?。。∽宇愒陔[藏了父類的成員變量或重寫了父類課后討論討論二類的繼承性與多態(tài)性〔1〕主題一:方案設(shè)計分析主題三:知識原理掌握—構(gòu)造方法的重載思考:〔1〕找出父類向子類派生時,構(gòu)造方法的調(diào)用規(guī)律〔2〕找出方法的重載與重寫的區(qū)別課后討論討論二類的繼承性與多態(tài)性〔1〕主題一:方案設(shè)計分析寫出你所能想到的所有二維、三維形狀,并用它們組成一個形狀層次構(gòu)造。層次構(gòu)造把Shape當(dāng)作超類,并從中派生出TwoDimensionalShape類和ThreeDimensionalShape類。設(shè)計這個層次構(gòu)造,并定義它的所有類。畫出相應(yīng)的類層次構(gòu)造圖。接下來考慮如果將Shape類變成abstract超類,TwoDimensionalShape類和hreeDimensionalShape類也是abstract類。進(jìn)展相應(yīng)的派生后,要求在第三層的類中計算出每個類對應(yīng)對象的面積和體積。主題一:方案設(shè)計分析寫出你所能想到的所有二維、三維形狀,并用主題三:知識原理掌握—構(gòu)造方法的重載建立一個人類〔Person〕和學(xué)生類〔Student〕,功能要求如下:〔1〕Person中包含4個保護(hù)型的數(shù)據(jù)成員name、addr、sex、age,表示姓名、地址、性別和年齡。用一個4參構(gòu)造方法、一個兩參構(gòu)造方法、一個無參構(gòu)造方法來實例化對象,用一個輸出方法顯示4種屬性?!?〕Student類繼承Person類,并增加輸出成員math、english存放數(shù)學(xué)、英語成績。用一個6參構(gòu)造方法、一個兩參構(gòu)造方法、一個無參構(gòu)造方法來實例化對象,另外重寫輸出方法用于顯示6種屬性。主題三:知識原理掌握—構(gòu)造方法的重載建立一個人類〔Perso第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性3.3抽象類和抽象方法3.4接口3.5內(nèi)部類和匿名類第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性多態(tài)(Polymorphism)的意思就是用一樣的名字來定義不同的方法。在Java中,普通類型的多態(tài)為重載,這就意味著可以使幾個不同的方法使用一樣的名字,這些方法以參數(shù)的個數(shù)不同、參數(shù)的類型不同等方面來進(jìn)展區(qū)分,以使得編譯器能夠進(jìn)展識別。也可以這樣講,重載是同一個方法具有不同的版本,每個版本之間在參數(shù)特征方面有差異。重載是Java實現(xiàn)多態(tài)性的方式之一。例如:family()方法可以有三個版本,如下:family(){}family(Stringch){address=ch;}family(Stringch,floatn){address=ch;pay=n;}這些方法并存于程序中,編譯時,編譯器根據(jù)實參的類型和個數(shù)來區(qū)分從而調(diào)用那個方法。如果這些方法作為函數(shù)或過程同時出現(xiàn)在其它語言的程序中,如C,那將導(dǎo)致災(zāi)難性的錯誤。3.2多態(tài)性多態(tài)(Polymorphism3.2多態(tài)性【例3-6】構(gòu)造方法重載的例子classperson{Stringname="Johnson";//姓名
intage=45;//年齡
person(){}
person(Stringa){name=a;}
person(Stringa,intb){name=a;age=b;}name+","+"Age="+age);}}publicclassPoly{publicstaticvoidmain(String[]args){personko1=newperson();personko2=newperson("Mike");personko3=newperson("Willian",50);ko1.display();ko2.display();ko3.display();}}3.2多態(tài)性【例3-6】構(gòu)造方法重載的例子3.2多態(tài)性在Java語言中,多態(tài)性主要表達(dá)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性〔編譯時多態(tài)〕和方法重寫實現(xiàn)的動態(tài)多態(tài)性〔運行時多態(tài)〕,如下:
1〕編譯時多態(tài)
在編譯階段,具體調(diào)用哪個被重載的方法,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調(diào)用相應(yīng)的方法。
2〕運行時多態(tài)
由于子類繼承了父類所有的屬性〔私有的除外〕,所以子類對象可以作為父類對象使用。程序中但凡使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調(diào)用子類的方法。如果子類重寫了父類的方法,那么重寫方法的調(diào)用原那么如下:Java運行時系統(tǒng)根據(jù)調(diào)用該方法的實例,來決定調(diào)用哪個方法。對子類的一個實例,如果子類重寫了父類的方法,那么運行時系統(tǒng)調(diào)用子類的方法;如果子類繼承了父類的方法〔未重寫〕,那么運行時系統(tǒng)調(diào)用父類的方法。另外,方法重寫時應(yīng)遵循的原那么如下:改寫后的方法不能比被重寫的方法有更嚴(yán)格的訪問權(quán)限。改寫后的方法不能比被重寫的方法產(chǎn)生更多的異常。進(jìn)展方法重寫時必須遵從這兩個原那么,否那么編譯器會指出程序出錯。3.2多態(tài)性在Java語言中,多態(tài)性主要表達(dá)在兩3.2多態(tài)性【例3-7】方法重寫的例子classParent{publicvoidfunction(){}}classChildextendsParent{
privatevoidfunction(){}}publicclassRTpolyTest{publicstaticvoidmain(Stringargs[]){Parentpl=newParent();Parentp2=newChild();p1.function();p2.function();}}3.2多態(tài)性【例3-7】方法重寫的例子3.2多態(tài)性編譯過程如下:D:\user\chap05>JavacRTpolyTest.javaRTpolyTest.java:8:function()inChildcannotoverridefunction()inParent;attemptingtoassignweakeraccessprivileges;waspublicprivatevoidfunction(){^RTpolyTest.java:16:cannotfindsymbolsymbol:variablep1location:classRTpolyTestp1.function();^2errors可以看出,該程序中實例p2調(diào)用function()方法時會導(dǎo)致訪問權(quán)限的沖突。
3.2多態(tài)性編譯過程如下:第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性3.3抽象類和抽象方法3.4接口3.5內(nèi)部類和匿名類第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.3抽象類和抽象方法Java語言中,用abstract關(guān)鍵字來修飾一個類時,這個類叫做抽象類。一個abstract類只關(guān)心它的子類是否具有某種功能,并不關(guān)心該功能的具體實現(xiàn),功能的具體行為由子類負(fù)責(zé)實現(xiàn)的。例如:
publicabstractclassDrawing{publicabstractvoiddrawDot(intx,inty);publicvoiddrawLine(intx1,inty1,intx2,inty2){…………}}
用abstract來修飾一個方法時,該方法叫做抽象方法。與final類和方法相反,abstract類必須被繼承,abstract方法必須被重寫。
3.3抽象類和抽象方法Java語言中,用abs3.3抽象類和抽象方法
當(dāng)一個類的定義完全表示抽象的概念時,它不應(yīng)該被實例化為一個對象。例如Java中的Number類就是一個抽象類,它只表示數(shù)字這一抽象概念,只有當(dāng)它作為整數(shù)類Integer或?qū)崝?shù)類Float等的父類時才有意義。定義一個抽象類的格式如下:
abstractclassabstractClass{……}
由于抽象類不能被實例化,因此下面的語句會產(chǎn)生編譯錯誤:
newabstractClass();抽象類中可以包含抽象方法,為所有子類定義一個統(tǒng)一的接口,對抽象方法只需聲明,而不需實現(xiàn),因此它沒有方法體。其格式如下:
abstracreturnTypeabstractMethod([paramlist));
3.3抽象類和抽象方法當(dāng)一個類的定義完全表示抽象使用abstract的另一例子abstractclassAA{abstractvoidcallme();voidmetoo(){}}classBBextendsAA{voidcallme(){}}publicclassAAbstract{publicstaticvoidmain(Stringargs[]){AAcc=newBB();//cc為上轉(zhuǎn)型對象
cc.callme();cc.metoo();}}
使用abstract的另一例子abstractclass第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性3.3抽象類和抽象方法3.4接口3.5內(nèi)部類和匿名類第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.4接口接口聲明使用接口的優(yōu)點3.4接口接口聲明接口聲明從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實現(xiàn)。通過接口使得處于不同層次,甚至互不相關(guān)的類可以具有一樣的行為。接口其實就是方法定義和常量值的集合。它的優(yōu)點主要表達(dá)在下面幾個方面:(1)通過接口可以實現(xiàn)不相關(guān)類的一樣行為,而不需要考慮這些類之間的層次關(guān)系。(2)通過接口可以指明多個類需要實現(xiàn)的方法。(3)通過接口可以了解對象的交互界面,而不需了解對象所對應(yīng)的類。接口把方法的定義和類的層次區(qū)分開來,通過它可以在運行時動態(tài)地定位所調(diào)用的方法。同時接口中可以實現(xiàn)“多重繼承〞,且一個類可以實現(xiàn)多個接口。正是這些機(jī)制使得接口提供了比多重繼承〔如C++等語言〕更簡單、更靈活、而且更強(qiáng)勁的功能。接口聲明從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包接口聲明Java不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java類層次簡單,易于程序的管理。為了抑制單繼承的缺點,Java使用了接口,一個類可以實現(xiàn)多個接口。使用關(guān)鍵字interface來定義一個接口。接口的定義和類的定義很相似,分為接口聲明和接口體兩局部。1、接口聲明我們曾使用class關(guān)鍵字來聲明類,接口通過使用關(guān)鍵自interface來聲明.完整的接口定義格式如下:[public]interfaceinterfaceName[extendslistOfSuperInterface]{……}其中public修飾符指明任意類均可以使用這個接口,缺省情況下,只有與該接口定義在同一個包中的類才可以訪問這個接口。extends子句與類聲明中的extends子句根本一樣,不同的是一個接口可以有多個父接口,用逗號隔開,而一個類只能有一個父類。子接口繼承父接口中所有的常量和方法。通常接口名稱以able或ible結(jié)尾,說明接口能完成一定的行為,例如Runnable、Serializable。接口聲明Java不支持多繼承性,即一個類只能有一接口聲明2、接口體接口體中包含常量定義和方法定義兩局部。其中常量定義局部定義的常量均具有public、static和final屬性。其格式如下:returnTypemethodName([paramlist]);接口中只能進(jìn)展方法的聲明,而不提供方法的實現(xiàn),所以,方法定義沒有方法體,且用分號(;)結(jié)尾,在接口中聲明的方法具有public和abstract屬性。另外,如果在子接口中定義了和父接口同名的常量,那么父接口中的常量被隱藏。例如:interfaceSummaryable{finalintMAX=50;//MAX具有public、static、final屬性voidprintone(floatx);floatsum(floatx,floaty);}上面這段程序可以以Summaryable.java來保存,也可以寫入其它Java程序中。接口聲明2、接口體接口聲明3、接口的使用一個類通過使用關(guān)鍵字implements聲明自己使用〔或?qū)崿F(xiàn)〕一個或多個接口。如果使用多個接口,用逗號隔開接口名。如classCalculateextendsComputerimplementsSummary,Substractable{……}類Calculate使用了Summary和Substractable接口,繼承了Computer類。如果一個類使用了某個接口,那么這個類必須實現(xiàn)該接口的所有方法,即為這些方法提供方法體。需要注意的如下:1〕在類中實現(xiàn)接口的方法時,方法的名字,返回類型,參數(shù)個數(shù)及類型必須與接口中的完全一致。2〕接口中的方法被默認(rèn)是public,所以類在實現(xiàn)接口方法時,一定要用public來修飾。3〕另外,如果接口的方法的返回類型如果不是void的,那么在類中實現(xiàn)該接口方法時,方法體至少要有一個return語句。如果是void型,類體除了兩個大括號外,也可以沒有任何語句.接口聲明3、接口的使用使用接口的優(yōu)點【例3-9】
使用多重接口的例子//MultInterfaces.javainterfaceI1{abstractvoidtest(inti);}interfaceI2{abstractvoidtest(Strings);}publicclassMultInterfacesimplementsI1,I2{publicvoidtest(inti){}publicvoidtest(Strings){}publicstaticvoidmain(String[]a){MultInterfacest=newMultInterfaces();t.test(42);t.test("Hello");}}使用接口的優(yōu)點【例3-9】使用多重接口的例子第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性3.3抽象類和抽象方法3.4接口3.5內(nèi)部類和匿名類第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.5內(nèi)部類和匿名類內(nèi)部類的定義內(nèi)部類特性匿名類3.5內(nèi)部類和匿名類內(nèi)部類的定義內(nèi)部類的定義簡單地說,一個類被嵌套定義于另一個類中,稱為嵌套類。在大多數(shù)情況下,嵌套類〔靜態(tài)的嵌套類除外)就是內(nèi)部類〔innerclass〕。包含內(nèi)部類的類稱為外部類。與一般的類一樣,內(nèi)部類具有自己的成員變量和成員方法。通過建立內(nèi)部類的對象,可以存取其成員變量和調(diào)用其成員方法。例如下面的例子:pubicclassGroupOne{intcount;//外部類的成員變量publicclassStudent{//聲明內(nèi)部類Stringname;//內(nèi)部類的成員變量publicvoidoutput(){//內(nèi)部類的成員方法;}}}內(nèi)部類的定義簡單地說,一個類被嵌套定義于另一個類內(nèi)部類的定義實際上,Java語言標(biāo)準(zhǔn)對于內(nèi)部類有如下的規(guī)定:在另一個類或者一個接口中聲明一個類。在另一個接口或者一個類中聲明一個接口。在一個方法中聲明一個類。類和接口聲明可嵌套任意深度。從上面的規(guī)定中我們可以看出,內(nèi)部類的定義是非常靈活的。內(nèi)部類的定義實際上,Java語言標(biāo)準(zhǔn)對于內(nèi)部類內(nèi)部類特性內(nèi)部類有如下特性:一般用在定義它的類或語句塊之內(nèi),在外部引用它時必須給出完整的名稱。名稱不能與包含它的類名一樣??梢允褂冒耐獠款惖撵o態(tài)成員變量和實例成員變量,也可以使用它所在方法的局部變量??梢远x為abstract??梢月暶鳛閜rivate或protected。假設(shè)被聲明為static,就變成了頂層類,不能再使用局部變量。假設(shè)想在內(nèi)部類中聲明任何static成員,那么該內(nèi)部類必須聲明為static。Java將內(nèi)部類作為外部類的一個成員,就如同成員變量和成員方法一樣。因此外部類與內(nèi)部類的訪問原那么是:在外部類中,通過一個內(nèi)部類的對象引用內(nèi)部類中的成員;反之,在內(nèi)部類中可以直接引用它的外部類的成員,包括靜態(tài)成員、實例成員及私有成員。內(nèi)部類特性內(nèi)部類有如下特性:內(nèi)部類特性【例3-10】內(nèi)部類和外部類之間的訪問本例的類GroupTwo中聲明了成員變量count、內(nèi)部類Student、實例方法output和main方法,在內(nèi)部類Student中聲明了構(gòu)造方法和output方法,構(gòu)造方法存取了外部類GroupTwo的成員變量count。程序運行結(jié)果:Johnsoncount=1本例演示嵌套的兩個類之間的訪問規(guī)那么,即在外部類GroupTwo中,通過一個內(nèi)部類Student的對象s1可以引用內(nèi)部類中的成員;反之,在內(nèi)部類Student中可以直接引用它的外部類的成員,如count。本例的外部類GroupTwo中有實例方法output(),內(nèi)部類Student中也有實例方法output(),兩者雖然同名,卻表達(dá)不同含義。使用時,外部類GroupTwo的對象調(diào)用GroupTwo的output,如g2.output(),內(nèi)部類Student的對象調(diào)用Student的output,如s1.output()。內(nèi)部類特性【例3-10】內(nèi)部類和外部類之間的訪問內(nèi)部類特性publicclassGroupTwo{//例5-10privateintcount;//外部類的私有成員變量
publicclassStudent{//聲明內(nèi)部類
Stringname;publicStudent(Stringn1){name=n1;count++;//存取其外部類的成員變量
}publicvoidoutput(){}}publicvoidoutput(){//外部類的實例成員方法
Students1=newStudent("Johnson");//建立內(nèi)部類對象"s1.output();//通過s1調(diào)用內(nèi)部類的成員方法
}publicstaticvoidmain(Stringargs[]){GroupTwog2=newGroupTwo();g2.output();}}內(nèi)部類特性publicclassGroupTwo{內(nèi)部類特性【例3-11】內(nèi)部類訪問外部靜態(tài)變量
GroupThree.java【例3-12】靜態(tài)公用內(nèi)部類
GroupFour.java【例3-13】抽象內(nèi)部類
GroupFive.java【例3-14】內(nèi)部接口
GroupSix.java【例3-15】局部內(nèi)部類
GoogsSeven.java內(nèi)部類特性匿名類匿名類是不能有名稱的類,所以沒方法引用它們。必須在創(chuàng)立時,作為new語句的一局部來聲明它們。要采用另一種形式的new語句,如下所示:
new<類或接口><類的主體>
這種形式的new語句聲明一個新的匿名類,它對一個給定的類進(jìn)展擴(kuò)展,或者實現(xiàn)一個給定的接口。它還創(chuàng)立那個類的一個新實例,并把它作為語句的結(jié)果而返回。要擴(kuò)展的類和要實現(xiàn)的接口是new語句的操作數(shù),后跟匿名類的主體。從技術(shù)上說,匿名類可被視為非靜態(tài)的內(nèi)部類,所以它們具有和方法內(nèi)部聲明的非靜態(tài)內(nèi)部類一樣的權(quán)限和限制。
有關(guān)匿名類的使用詳見本書第12章本分內(nèi)容。內(nèi)部和匿名類是Java為我們提供的兩個出色的工具。它們提供了更好的封裝,結(jié)果就是使代碼更容易理解和維護(hù),使相關(guān)的類都能存在于同一個源代碼文件中〔這要歸功于內(nèi)部類〕,并能防止一個程序產(chǎn)生大量非常小的類〔這要歸功于匿名類〕。匿名類匿名類是不能有名稱的類,所以沒方法引用它們。必須在創(chuàng)立匿名類例子
f=newFrame("Innerclassesexample");
tf=newTextField(30);
}
匿名類例子f=newFrame("InnerpublicvoidlaunchFrame(){
Labellabel=newLabel("Clickanddragthemouse");
f.add(label,BorderLayout.NORTH);
f.add(tf,BorderLayout.SOUTH);
f.addMouseMotionListener(newMouseMotionAdapter(){//匿名類開場
publicvoidmouseDragged(MouseEvente){
Strings="Mousedragging:x="+e.getX()+"Y="+e.getY();
tf.setText(s);}
});//匿名類完畢
f.setSize(300,200);
f.setVisible(true);
}
publicstaticvoidmain(Stringargs[]){
AnonymousClassobj=newAnonymousClass();
obj.launchFrame();
}
}
publicvoidlaunchFrame(){
《類的繼承性》幻燈片本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!本課件PPT僅供大家學(xué)習(xí)使用學(xué)習(xí)完請自行刪除,謝謝!《類的繼承性》幻燈片本課件PPT僅供大家學(xué)習(xí)使用《類的繼承性》教學(xué)課件《類的繼承性》教學(xué)課件《類的繼承性》教學(xué)課件《類的繼承性》教學(xué)課件訪問控制權(quán)限了解
訪問控制權(quán)限了解第3講面向?qū)ο缶幊獭哺呒壠车?講面向?qū)ο缶幊獭哺呒壠趁嫦驅(qū)ο缶幊獭哺灼持R回憶面向?qū)ο缶幊獭哺灼持R回憶主要內(nèi)容3.1繼承性3.2多態(tài)性3.3抽象類3.4接口3.5內(nèi)部類和匿名類3.1繼承的作用3.2子類對象的創(chuàng)立3.3在子類中訪問父類的成員3.4覆蓋父類的方法主要內(nèi)容3.1繼承性3.1繼承的作用繼承Person-name:String-age:String+getName():String+setName(Stringn):void+getAge():String+setAge(inta):voidStudent-name:String-age:String-school:String+getName():String+setName(Stringn):void+getAge():String+setAge(inta):void+getSchool():String+setSchool(Strings):void為什么引入繼承的特性?模仿人類的思維方式—人類的繼承性繼承Person-name:String+getNamPerson類classPerson{privateStringname;privateintage;publicStringgetName(){returnname;}
publicvoidsetName(Stringn){name=n;}publicintgetAge(){returnage;}publicvoidsetAge(inta){age=a;}}Student類classStudent{privateStringname;privateintage;privateStringschool;publicStringgetName(){returnname;}publicvoidsetName(Stringn){name=n;}publicintgetAge(){returnage;}publicvoidsetAge(inta){age=a;}publicStringgetSchool{returnschool;}publicvoidsetSchool(Strings){school=s;}}Person類Student類繼承為什么引入繼承的特性?模仿人類的思維方式—人類的繼承性2.程序的代碼重用性—少寫代碼繼承為什么引入繼承的特性?模仿人類的思維方式—人類的繼承性2繼承關(guān)系格式:class父類{……}class子類extends
父類{……}試驗!eXTdEMO1.JAVAeXTdEMO2.JAVA繼承關(guān)系格式:class父類試驗!eXTdEMO1.JAVQQ牧場的設(shè)計目的:了解在真實系統(tǒng)中進(jìn)展設(shè)計時如何進(jìn)展繼承層次的設(shè)計?QQ牧場的設(shè)計目的:了解在真實系統(tǒng)中進(jìn)展設(shè)計時如何進(jìn)展繼承層①找出對象的共同屬性和行為這個程序必須能夠在任何時候參加新類型的動物。首先要區(qū)分出所有動物都有的、抽象的共同特征,然后以這些共同特征設(shè)計出能夠讓所有動物加以擴(kuò)大的類。考慮:這6種動物有什么共同特點?這些類型有什么相關(guān)性?①找出對象的共同屬性和行為這個程序必須能夠在任何時①找出對象的共同屬性和行為5個實例變量: picture:動物JPEG圖像的名稱 food:此動物所吃的食物(meat/grass) hunger:代表饑餓程度的int值。會根據(jù)動物吃了多少食物而改變。 boundaries:代表動物活動范圍區(qū)域的長寬。 location:動物在活動區(qū)域中的位置。4個實例方法:
makeNoise():動物發(fā)出聲音的行為和程序。 eat():動物遇到食物時的行為程序。 sleep():睡眠的行為程序。 roam():不在進(jìn)食或睡眠時的行為程序。①找出對象的共同屬性和行為5個實例變量:②設(shè)計代表共同狀態(tài)與行為的類Animal-Stringpictual-Stringfood-inthunger-Positionboudaries-PositionlocationvoidmakeNoise()voideat()voidsleep()voidroam()LionCatTiggerHippoDogWolf②設(shè)計代表共同狀態(tài)與行為的類Animal-String③決定子類是否需要讓某項行為有特定的不同的運行方式Animal成員變量。。。。。。voidmakeNoise()voideat()voidsleep()voidroam()LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggerHippoDogWolf③決定子類是否需要讓某項行為有特定的不同的運行方式Anima③決定子類是否需要讓某項行為有特定的不同的運行方式Animal成員變量。。。。。。voidmakeNoise()voideat()voidsleep()voidroam()LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggervoidmakeNoise()voideat()DogvoidmakeNoise()voideat()HippovoidmakeNoise()voideat()WolfvoidmakeNoise()voideat()③決定子類是否需要讓某項行為有特定的不同的運行方式Anima④尋找更多抽象化的時機(jī)Animal成員變量。。。。。。voidmakeNoise()voideat()voidsleep()voidroam()LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggervoidmakeNoise()voideat()DogvoidmakeNoise()voideat()HippovoidmakeNoise()voideat()WolfvoidmakeNoise()voideat()④尋找更多抽象化的時機(jī)Animal成員變量voidm⑤完成類的繼承層次Animal。。。。。。。。。。。。LionvoidmakeNoise()voideat()CatvoidmakeNoise()voideat()TiggervoidmakeNoise()voideat()DogvoidmakeNoise()voideat()HippovoidmakeNoise()voideat()WolfvoidmakeNoise()voideat()Feline……roam()Canine……roam()⑤完成類的繼承層次Animal。。。。。。。。。。。。Lio⑤完成類的繼承層次④尋找更多抽象化的時機(jī)③決定子類是否需要讓某項行為有特定的不同的運行方式②設(shè)計代表共同狀態(tài)與行為的類如何進(jìn)展繼承層次的設(shè)計--自下而上的設(shè)計
①找出對象的共同屬性和行為⑤完成類的繼承層次④尋找更多抽象化的時機(jī)③決定子類是否需要讓子類對象調(diào)用成員的原那么AnimalmakeNoise()eat()sleep()roam()WolfvoidmakeNoise()voideat()Canine……roam()創(chuàng)建大野狼對象Wolfw=newWolf();調(diào)用大野狼的方法w.makeNoise();調(diào)用犬科的方法w.roam();調(diào)用動物的方法w.sleep()最低階原那么子類對象調(diào)用成員的原那么AnimalmakeNoise()W③添加子類的新成員②改造父類的成員①繼承父類的成員父類如何進(jìn)展子類設(shè)計--自上而下的設(shè)計
③添加子類的新成員②改造父類的成員①繼承父類的成員父類訪問控制權(quán)限了解
訪問控制權(quán)限了解③添加子類的新成員②改造父類的成員①繼承父類的成員父類如何進(jìn)展子類設(shè)計--自上而下的設(shè)計
③添加子類的新成員②改造父類的成員①繼承父類的成員父類子類對象的創(chuàng)立一、子類對象的實例化過程二、super的作用子類對象的創(chuàng)立一、子類對象的實例化過程子類的創(chuàng)立一、子類對象的實例化過程classPerson{ publicPerson()父類構(gòu)造〞);}}classStudent{ publicStudent()子類構(gòu)造〞);}}子類的創(chuàng)立一、子類對象的實例化過程子類對象的創(chuàng)立一、子類對象的實例化過程publicclassTestDemo11{ publicstaticvoidmain(Stringargs[]){
Studentstu=newStudent(); }}運行結(jié)果:
?子類對象的創(chuàng)立一、子類對象的實例化過程運行結(jié)果:?子類對象的創(chuàng)立一、子類對象的實例化過程1、先自動調(diào)用父類構(gòu)造函數(shù)〔父類中的無參構(gòu)造函數(shù)〕2、然后調(diào)用子類構(gòu)造函數(shù)注意:如果父類中有多個構(gòu)造方法時,如何才能調(diào)用父類中某個特定的構(gòu)造方法呢?其做法是在子類的構(gòu)造方法中通過super〔…〕來調(diào)用父類特定的構(gòu)造方法。子類對象的創(chuàng)立一、子類對象的實例化過程創(chuàng)立子類二、super()、super(……)classPerson{ privateStringname; privateintage; publicPerson() {調(diào)用Person類的無參構(gòu)造方法〞);} publicPeron(Stringname,intage)調(diào)用了Person類的有參構(gòu)造方法〞); =name; this.age=age;} publicvoidshow() {姓名:〞+name+〞年齡:〞+age);} }創(chuàng)立子類二、super()、super(……)子類對象的創(chuàng)立classStudentextendsPerson{ privateStringdepartment; publicStudent()無參構(gòu)造〞);} publicStudent(Stringname,intage,Stringdep) {super(name,age); department=dep;我是〞+department+〞的學(xué)生〞);有參構(gòu)造〞);}}子類對象的創(chuàng)立classStudentextendsP子類對象的創(chuàng)立publicclassTestDemo1{ publicstaticvoidmain(Stringargs[]){ Studentstu1=newStudent(); Studentstu2=newStudent(“李四〞,23,〞計算機(jī)系〞); stu1.show(); stu2.show(); }}子類對象的創(chuàng)立publicclassTestDemo1{子類對象的創(chuàng)立省略紅色字體super(name,age),父類中的構(gòu)造方法哪個會被調(diào)用?子類構(gòu)造方法中調(diào)用父類構(gòu)造方法的super語句位置有沒有限制?如果父類中只定義了有參的構(gòu)造方法,而子類的構(gòu)造方法中并沒有顯式的用super〔〕來調(diào)用父類中特定的構(gòu)造方法,程序此時會有問題嗎?找出this和super的一樣點和不同點。思考??!!找出繼承中構(gòu)造方法的調(diào)用規(guī)那么子類對象的創(chuàng)立省略紅色字體super(name,age),父成員變量的隱藏和方法的覆寫〔1〕當(dāng)在子類中定義的成員變量和父類中的成員變量同名時,此時稱子類的成員變量隱藏了父類的成員變量。改造父類的成員〔2〕當(dāng)子類中定義了一個方法,并且這個方法的名字,返回類型,參數(shù)個數(shù)以及類型和父類的某個方法完全一樣時,父類的這個方法將被隱藏,這時我們說重寫了父類的方法。子類通過成員變量的隱藏和方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。成員變量的隱藏和方法的覆寫〔1〕當(dāng)在子類中定義的成員變量和父成員變量的隱藏和方法的覆寫例如下面的這段程序就是這樣的情況:classSuperClass{//父類
inty;
voidsetY(){y=0;}}classSubClassextendsSuperClass{inty;//父類變量y被隱藏
voidsetY(){//重寫父類的方法setY()y=1;}}publicTestDemo3{publicstaticvoidmain(Stringargs[]){
SubClassss=newSubClass();
ss.setY();}}成員變量的隱藏和方法的覆寫例如下面的這段程序就是這樣的情況:
子類在隱藏了父類的成員變量或重寫了父類的方法后,常常還要用到父類的成員變量,或在重寫的方法中使用父類中被重寫的方法以簡化代碼的編寫,這時就要訪問父類的成員變量或調(diào)用父類的方法,Java中通過super來實現(xiàn)對父類成員的訪問。this用來引用當(dāng)前對象,與this類似,super用來引用當(dāng)前對象的父類。super的使用可以分為下面三種情況:
1)用來訪問父類被隱藏的成員變量,如:
super.y2)用來調(diào)用父類中被重寫的方法,如:
super.setY()
3)用來調(diào)用父類的構(gòu)造方法,如:
super([paramlist]);成員變量的隱藏和方法的覆寫思考:方法的重載與覆寫非常類似,找出它們的區(qū)別?。?!子類在隱藏了父類的成員變量或重寫了父類課后討論討論二類的繼承性與多態(tài)性〔1〕主題一:方案設(shè)計分析主題三:知識原理掌握—構(gòu)造方法的重載思考:〔1〕找出父類向子類派生時,構(gòu)造方法的調(diào)用規(guī)律〔2〕找出方法的重載與重寫的區(qū)別課后討論討論二類的繼承性與多態(tài)性〔1〕主題一:方案設(shè)計分析寫出你所能想到的所有二維、三維形狀,并用它們組成一個形狀層次構(gòu)造。層次構(gòu)造把Shape當(dāng)作超類,并從中派生出TwoDimensionalShape類和ThreeDimensionalShape類。設(shè)計這個層次構(gòu)造,并定義它的所有類。畫出相應(yīng)的類層次構(gòu)造圖。接下來考慮如果將Shape類變成abstract超類,TwoDimensionalShape類和hreeDimensionalShape類也是abstract類。進(jìn)展相應(yīng)的派生后,要求在第三層的類中計算出每個類對應(yīng)對象的面積和體積。主題一:方案設(shè)計分析寫出你所能想到的所有二維、三維形狀,并用主題三:知識原理掌握—構(gòu)造方法的重載建立一個人類〔Person〕和學(xué)生類〔Student〕,功能要求如下:〔1〕Person中包含4個保護(hù)型的數(shù)據(jù)成員name、addr、sex、age,表示姓名、地址、性別和年齡。用一個4參構(gòu)造方法、一個兩參構(gòu)造方法、一個無參構(gòu)造方法來實例化對象,用一個輸出方法顯示4種屬性?!?〕Student類繼承Person類,并增加輸出成員math、english存放數(shù)學(xué)、英語成績。用一個6參構(gòu)造方法、一個兩參構(gòu)造方法、一個無參構(gòu)造方法來實例化對象,另外重寫輸出方法用于顯示6種屬性。主題三:知識原理掌握—構(gòu)造方法的重載建立一個人類〔Perso第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性3.3抽象類和抽象方法3.4接口3.5內(nèi)部類和匿名類第3章面向?qū)ο蟾呒壋绦蛟O(shè)計3.1繼承3.2多態(tài)性多態(tài)(Polymorphism)的意思就是用一樣的名字來定義不同的方法。在Java中,普通類型的多態(tài)為重載,這就意味著可以使幾個不同的方法使用一樣的名字,這些方法以參數(shù)的個數(shù)不同、參數(shù)的類型不同等方面來進(jìn)展區(qū)分,以使得編譯器能夠進(jìn)展識別。也可以這樣講,重載是同一個方法具有不同的版本,每個版本之間在參數(shù)特征方面有差異。重載是Java實現(xiàn)多態(tài)性的方式之一。例如:family()方法可以有三個版本,如下:family(){}family(Stringch){address=ch;}family(Stringch,floatn){address=ch;pay=n;}這些方法并存于程序中,編譯時,編譯器根據(jù)實參的類型和個數(shù)來區(qū)分從而調(diào)用那個方法。如果這些方法作為函數(shù)或過程同時出現(xiàn)在其它語言的程序中,如C,那將導(dǎo)致災(zāi)難性的錯誤。3.2多態(tài)性多態(tài)(Polymorphism3.2多態(tài)性【例3-6】構(gòu)造方法重載的例子classperson{Stringname="Johnson";//姓名
intage=45;//年齡
person(){}
person(Stringa){name=a;}
person(Stringa,intb){name=a;age=b;}name+","+"Age="+age);}}publicclassPoly{publicstaticvoidmain(String[]args){personko1=newperson();personko2=newperson("Mike");personko3=newperson("Willian",50);ko1.display();ko2.display();ko3.display();}}3.2多態(tài)性【例3-6】構(gòu)造方法重載的例子3.2多態(tài)性在Java語言中,多態(tài)性主要表達(dá)在兩個方面:由方法重載實現(xiàn)的靜態(tài)多態(tài)性〔編譯時多態(tài)〕和方法重寫實現(xiàn)的動態(tài)多態(tài)性〔運行時多態(tài)〕,如下:
1〕編譯時多態(tài)
在編譯階段,具體調(diào)用哪個被重載的方法,編譯器會根據(jù)參數(shù)的不同來靜態(tài)確定調(diào)用相應(yīng)的方法。
2〕運行時多態(tài)
由于子類繼承了父類所有的屬性〔私有的除外〕,所以子類對象可以作為父類對象使用。程序中但凡使用父類對象的地方,都可以用子類對象來代替。一個對象可以通過引用子類的實例來調(diào)用子類的方法。如果子類重寫了父類的方法,那么重寫方法的調(diào)用原那么如下:Java運行時系統(tǒng)根據(jù)調(diào)用該方
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京課改版歷史七年級上冊第6課《春秋五霸》聽課評課記錄
- 湘教版數(shù)學(xué)九年級上冊5.1《總體平均數(shù)與方差的估計》聽評課記錄2
- 蘇科版九年級數(shù)學(xué)聽評課記錄:第82講期中期末串講
- 統(tǒng)編版七年級下冊道德與法治第四課 揭開情緒的面紗 聽課評課記錄(2課時)
- 華東師大版八年級上冊數(shù)學(xué)聽評課記錄《命題》
- 部編人教版道德與法治九年級下冊全冊集體備課聽課評課記錄
- 人教新課標(biāo)地理七年級上冊《1.1地球和地球儀》聽課評課記錄
- 湘教版數(shù)學(xué)八年級下冊《2.7 正方形》聽評課記錄
- 2025年自動造型線合作協(xié)議書
- 華師大版歷史九年級上冊第3課《古代印度》聽課評課記錄
- 江蘇揚州市2025屆高一物理第一學(xué)期期末學(xué)業(yè)水平測試試題含解析
- pcn培訓(xùn)培訓(xùn)課件
- 對高質(zhì)量教育發(fā)展看法和建議
- 山西省晉中市2023-2024學(xué)年高一上學(xué)期期末考試 數(shù)學(xué) 含解析
- 浙江省2023年高中信息技術(shù)學(xué)業(yè)水平考試檢測卷(四)(含答案解析)
- 過錯方財產(chǎn)自愿轉(zhuǎn)讓協(xié)議書(2篇)
- 2025新外研社版英語七年級下單詞表
- 選擇性必修中冊寫作任務(wù)·申論
- 《冠心病病人的護(hù)理》課件
- 監(jiān)理專題安全例會紀(jì)要(3篇)
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認(rèn)證機(jī)構(gòu)要求》中文版(機(jī)翻)
評論
0/150
提交評論