資源描述:
《java語言程序設(shè)計基礎(chǔ)教程(繼承、接口和內(nèi)部類)ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、第4章 繼承、接口和內(nèi)部類繼承、超類和子類抽象類和接口內(nèi)部類Class類4.1繼承、超類和子類繼承是面向?qū)ο缶幊碳夹g(shù)的一塊基石,是一種由已有的類創(chuàng)建新類的機制。運用繼承,可以先創(chuàng)建一個通用類,它定義了一系列相關(guān)屬性的一般特性。該類可以被更具體的類繼承,每個具體的類都增加一些自己特有的東西。在Java術(shù)語學(xué)中,被繼承的類叫超類(superclass),繼承超類的類叫子類(subclass)。子類不能繼承父類中訪問權(quán)限為private的成員變量和方法。子類可以重寫父類的方法,及命名與父類同名的成員變量。Java不支持多重繼承,即一個類從多個超類派生
2、的能力。通過繼承實現(xiàn)代碼復(fù)用。Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。4.1.1子類繼承一個類,只要用extends關(guān)鍵字把一個類的定義合并到另一個中就可以了。創(chuàng)建子類的一般格式為:classSubClassextendsSuperClass{…}例如:classStudentsextendsPeople{…}4.1.2子類的繼承子類通過隱藏父類的成員變量和重寫父類的方法,可以把父類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。例如:classSuperClass{intx;…voidsetX(){x=0;}…
3、}classSubClassextendsSuperClass{intx;//隱藏了父類的變量x…voidsetX(){//重寫了父類的方法setX()x=5;}…}注意:子類中重寫的方法和父類中被重寫的方法要具有相同的名字,相同的參數(shù)表和相同的返回類型,只是函數(shù)體不同?!纠?-1】一個關(guān)于繼承的簡單例子。//Createasuperclass.classSA{inti,j;voidshowij(){System.out.println("iandj:"+i+""+j);}}//CreateasubclassbyextendingclassA.
4、classSBextendsA{intk;voidshowk(){System.out.println("k:"+k);}voidsum(){System.out.println("i+j+k:"+(i+j+k));}}classSimpleInheritance{publicstaticvoidmain(Stringargs[]){SAsuperOb=newSA();SBsubOb=newSB();//Thesuperclassmaybeusedbyitself.superOb.i=10;superOb.j=20;System.out.pri
5、ntln("ContentsofsuperOb:");superOb.showij();System.out.println();//ThesubclasshasAccesstoallpublicmembersofitssuperclass.subOb.i=7;subOb.j=8;subOb.k=9;System.out.println("ContentsofsubOb:");subOb.showij();subOb.showk();System.out.println();System.out.println("Sumofi,jandkins
6、ubOb:");subOb.sum();}}4.1.3super關(guān)鍵字與類中this關(guān)鍵字相似,Java語言中使用關(guān)鍵字super表示父類對象。通過在子類中使用super做前綴可以引用被子類隱藏的父類變量或被子類重寫的父類方法。super用來引用當前對象的父類,雖然構(gòu)造方法不能夠繼承,但利用super關(guān)鍵字,子類構(gòu)造方法中也可以調(diào)用父類的構(gòu)造方法。Super的使用有2種情況:1.操作被隱藏的變量和方法訪問父類被隱藏的成員變量,一般格式為:super.variable;調(diào)用父類中被重寫的方法,一般格式為:super.Method([paramli
7、st]);假如成員變量x和方法y()分別是被子類隱藏的父類的變量和方法,則:super.x//表示父類的成員變量xsuper.y()//表示父類的成員方法y()【例4-2】利用supers操作父類被隱藏和重寫的變量和方法。classep4_2_a{intn;floatf(){floatsum=0;for(inti=1;i<=n;i++){sum=sum+i;}returnsum;}}classep4_2_bextendsep4_2_a{intn;floatf(){floatc;super.n=n;c=super.f();returnc/n;}f
8、loatg(){floatc;c=super.f();returnc/2;}}classep4_2{publicstaticvoidmain(Stri