




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
程序設(shè)計(jì)第6章繼承和多態(tài)目錄2
6.1類的繼承性
6.2繼承的規(guī)則
6.3
抽象類與最終類
6.4類對象之間的類型轉(zhuǎn)換
6.5接口6.6類的多態(tài)6.1類的繼承性6.1.1繼承的概念基類、父類或超類派生類或子類6.1.2繼承的實(shí)現(xiàn)extends是關(guān)鍵字36.1.1繼承的概念繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特征若類B繼承了類A被繼承的類A可稱為基類、父類或超類繼承類B稱為派生類或子類子類可以繼承基類的屬性和方法增加基類沒有的屬性和方法重寫基類的已有方法提高程序擴(kuò)展性,復(fù)用基類的代碼,從而提高編程效率Java語言只支持單繼承,即每個(gè)子類只有一個(gè)基類46.1.2繼承的實(shí)現(xiàn)聲明子類使用extends關(guān)鍵字它的含義是擴(kuò)展基類,即繼承基類。[類修飾符]class
類名[extends
基類]{ [成員變量聲明] [getters和setters方法] [構(gòu)造方法定義] [成員方法定義]}5完整的Circle類publicclassCircleextendsShape{privatedoubleradius;publicdoublegetRadius(){returnradius;}publicvoidsetRadius(doubleradius){this.radius=radius;}publicCircle(Stringcolor,doubleradius){super(color);this.radius=radius;}publicCircle(){super();}publicdoublegetPerimeter(){return2*Math.PI*radius;}publicdoublegetArea(){returnMath.PI*radius*radius;}publicvoidprint(){super.print();System.out.println("圓的周長為:"+getPerimeter());System.out.println("圓的面積為:"+getArea());}}public
classTest{public
static
voidmain(String[]args){Shapes=newShape();s.setColor("red");s.print();Circlec=newCircle();c.setColor("green");c.print();}}6.2繼承的規(guī)則6.2.1成員變量的繼承屬性的繼承和擴(kuò)展屬性隱藏6.2.2成員方法的繼承方法的繼承和擴(kuò)展成員方法的重寫6.2.3this和super關(guān)鍵字76.2.1成員變量的繼承1、屬性的繼承和擴(kuò)展Circle類繼承的屬性:color擴(kuò)展的屬性:radiusRectangle類繼承的屬性:color擴(kuò)展的屬性:length、width子類從父類繼承的屬性(成員變量)不用重復(fù)定義,簡化程序89成員變量的隱藏如果子類聲明了與基類同名的成員變量在子類中基類的成員變量被隱藏。子類仍然繼承了基類的成員變量,只是將其名字隱藏public
classPerson{ Stringname="程艷"; Stringaddress="中南路8號";
public
voidshowDetail(){ System.out.println("name="+name+",address="+address); }}public
classStudentextendsPerson{Stringaddress="高浪西路1600"; Stringschool="無錫職業(yè)技術(shù)學(xué)院";
public
voidshowInfo(){ showDetail(); System.out.println("newaddress:"+
address+",oldaddress:"
+super.address+",school:"+school); }}public
classTest{
public
static
voidmain(String[]args){ Students=newStudent(); s.showInfo(); }}成員變量的隱藏屬性隱藏時(shí)當(dāng)子類執(zhí)行繼承自父類的方法時(shí),處理的是繼承自父類的變量當(dāng)子類執(zhí)行自己定義的方法時(shí),處理的是子類自己定義的變量若在第二種情況,仍希望調(diào)用父類的屬性,需要使用super關(guān)鍵字11成員方法的覆蓋如果子類定義了與基類同名的成員方法在子類中基類的成員方法被覆蓋子類不再繼承基類的方法public
classAdd{
void
compute(floatx,floaty){ System.out.println("父類:"+x+"+"+y+"="+(x+y)); }
void
g(intx,inty){ System.out.println("父類:"+x+"+"+y+"="+(x+y)); }}public
classMultiplyextendsAdd{
void
compute(floatx,floaty){ System.out.println("子類:"+x+"*"+y+"="+(x*y)); }}public
classTestExample6_3{
public
static
voidmain(String[]args){ Multiplym=newMultiply(); pute(8,9); m.g(12,8); }}6.2.3this和superthisthis是一個(gè)引用對象本身的指針,意思是“我”當(dāng)前對象的成員變量:this.成員變量當(dāng)前對象的成員方法:this.成員方法([參數(shù)列表])當(dāng)前對象的構(gòu)造方法:this([參數(shù)列表])引用當(dāng)前對象:returnthis;12supersupersuper只用在有繼承關(guān)系的場合,意思是“父”,而不是“祖父”直接基類的成員變量:super.成員變量直接基類的成員方法:super.成員方法([參數(shù)列表])直接基類的構(gòu)造方法:super([參數(shù)列表])136.3抽象類與最終類6.3.1抽象類和抽象方法6.3.2最終類與最終方法146.3.1抽象類和抽象方法用abstract修飾的類是抽象類用abstract修飾的方法是抽象方法特點(diǎn)抽象類不能被實(shí)例化,即不能用new來創(chuàng)建實(shí)例。抽象方法只有方法名、參數(shù)列表和返回值類型,但沒有方法體抽象類中可以沒有抽象方法,有抽象方法的類一定是抽象類。抽象方法必須在子類中給出具體實(shí)現(xiàn)。抽象類必須被繼承,子類根據(jù)自身需要擴(kuò)展抽象類:抽象類和抽象方法不能使用private、static、final修飾符實(shí)現(xiàn)全部抽象方法,從而成為普通的類。不實(shí)現(xiàn)全部抽象方法,因此仍然是抽象類。156.3.1抽象類和抽象方法
1、抽象類的定義用abstract修飾符指明它是一個(gè)抽象類[public]abstractclass類名[extends基類][implements接口列表]{ [成員變量聲明] [構(gòu)造方法定義] [成員方法定義]}說明:public[可選]:抽象類默認(rèn)不是public的,通常聲明為public的。抽象類必須要有abstract修飾符。抽象類不能被實(shí)例化。6.3.1抽象類和抽象方法2、抽象方法[public]abstract
返回類型方法名([參數(shù)列表])[throws異常列表];說明:public[可選]:抽象方法默認(rèn)不是public的,通常聲明為public的抽象方法必須要有abstract修飾符抽象方法不能有方法體,直接用分號“;”結(jié)束含有抽象方法的類必須是抽象類,不能被實(shí)例化抽象方法必須在子類中被實(shí)現(xiàn)【例6.4】設(shè)計(jì)Shape抽象類并添加getArea()抽象方法。
publicabstractclassShape{ protectedStringcolor; publicvoidprintColor(){ System.out.println("顏色是:"+color); } publicShape(Stringcolor){ this.color=color; } publicShape(){ }
publicabstractdoublegetArea();}抽象類Shape的子類必須定義getArea()方法,在子類中計(jì)算面積,兩個(gè)子類的代碼設(shè)計(jì)不變。完整的Circle類publicclassCircleextendsShape{privatedoubleradius;publicdoublegetRadius(){returnradius;}publicvoidsetRadius(doubleradius){this.radius=radius;}publicCircle(Stringcolor,doubleradius){super(color);this.radius=radius;}publicCircle(){super();}publicdoublegetPerimeter(){return2*Math.PI*radius;}publicdoublegetArea(){returnMath.PI*radius*radius;}publicvoidprint(){super.print();System.out.println("圓的周長為:"+getPerimeter());System.out.println("圓的面積為:"+getArea());}}public
classTest{public
static
voidmain(String[]args){Shapes=newShape();s.setColor("red");s.print();Circlec=newCircle();c.setColor("green");c.print();}}抽象類的用途實(shí)現(xiàn)代碼復(fù)用通過對抽象類的繼承可以實(shí)現(xiàn)代碼的復(fù)用復(fù)用的是普通方法以及屬性,并非復(fù)用抽象方法規(guī)范子類的行為抽象類可以規(guī)范子類的行為通過抽象方法來規(guī)范子類的行為206.3.2最終類和最終方法用final修飾的類是最終類,是指不能被繼承的類用final修飾的方法是最終方法,可保護(hù)類中的一些方法不被重寫注意一個(gè)類不能既是最終類又是抽象類,final和abstract之間是互斥的final修飾變量(成員變量和局部變量),該變量是常量final修飾方法時(shí),方法不能被覆蓋final修飾類時(shí),類不能被繼承216.4類對象之間的類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換也稱向上轉(zhuǎn)型,子類對象可以自動(dòng)轉(zhuǎn)換為基類對象強(qiáng)制類型轉(zhuǎn)換也稱向下轉(zhuǎn)型,基類對象在一定的條件下可以轉(zhuǎn)換成子類對象,但必須使用強(qiáng)制類型轉(zhuǎn)換。條件只有一條:基類對象所指向的對象實(shí)際上就是子類對象的類型。不能轉(zhuǎn)型處于相同類層次的類對象之間不能進(jìn)行轉(zhuǎn)換沒有繼承關(guān)系的類之間不能進(jìn)行轉(zhuǎn)換。226.5接口Java語言支持單繼承若遇復(fù)雜問題,需繼承多個(gè)類,使用接口解決單繼承問題可實(shí)現(xiàn)多個(gè)接口236.5接口6.5.1接口的聲明6.5.2接口的實(shí)現(xiàn)6.5.3接口的繼承6.5.4接口的特點(diǎn)246.5.1接口的聲明接口接口是抽象程度更高的類類不允許多繼承,而接口可以多繼承接口的聲明使用interface關(guān)鍵字25interfaceShape2D{
//接口doublePI=3.14159;
//接口中的變量都是靜態(tài)公開常量publicstaticfinaldoublearea();
//接口中的方法是公開抽象的,因此省略public
abstract關(guān)鍵字}6.5.2接口的實(shí)現(xiàn)使用implements關(guān)鍵字26public
classCricle1
implements
Shape2D{
doubleradius;
public
voidsetRadius(doubleradius){
this.radius=radius; }
publicdoublearea(){ returnPI*radius*radius; }}public
classInterfaceDemo{
public
static
voidmain(String[]args){ Cricle1c=newCricle1(); c.setRadius(10); System.out.println("Circlearea:"+c.area()); }}注意:如果實(shí)現(xiàn)一個(gè)接口時(shí),有抽象方法沒有實(shí)現(xiàn),則該類就是一個(gè)抽象類。6.5.3接口的繼承接口的繼承、類對接口的實(shí)現(xiàn)、類的繼承、聚集等publicinterfaceShape3DextendsShape2D{ doublevolume();}publicclassCircle2implementsShape3D{ doubleradius; publicCircle2(doubleradius){ this.radius=radius; } publicdoublevolume(){ return4*PI*radius*radius*radius/3; } publicdoublearea(){ returnPI*radius*radius; }}276.5.3接口的繼承publicinterfaceColor{ voidsetColor(Stringstr);}publicclassCircle3implementsShape2D,Color{ Stringcol; doubleradius; publicCircle3(doubleradius){ this.radius=radius; } publicvoidsetColor(Stringstr){ this.col=str; } publicStringgetColor(){ returncol; } publicdoublearea(){ returnPI*radius*radius; }}286.5.4接口的特點(diǎn)接口中的方法全部是抽象方法,屬性全部為靜態(tài)常量。接口不能被實(shí)例化,即不能用new來創(chuàng)建實(shí)例。接口必須被實(shí)現(xiàn):實(shí)現(xiàn)全部抽象方法,實(shí)現(xiàn)類成為普通的類。不實(shí)現(xiàn)全部抽象方法,實(shí)現(xiàn)類成為抽象類。接口是多繼承的,同時(shí)類可以實(shí)現(xiàn)多個(gè)接口。296.5.4接口的特點(diǎn)抽象類接口abstract修飾符不能省略abstract修飾符抽象類的子類繼承省略abstract修飾符子類和實(shí)現(xiàn)類抽象類的子類繼承(extends)抽象類接口的實(shí)現(xiàn)類實(shí)現(xiàn)(implements)接口,多實(shí)現(xiàn)繼承單繼承多繼承變量和方法除抽象方法外,有成員變量,也可以有普通方法只能有抽象方法,以及靜態(tài)常量復(fù)用實(shí)現(xiàn)代碼的復(fù)用不能實(shí)現(xiàn)代碼的復(fù)用306.6類的多態(tài)多態(tài)性是面向?qū)ο蟪绦蛟O(shè)計(jì)的一個(gè)重要特征。方法的多態(tài),是指屬性或方法在子類中表現(xiàn)為多種形態(tài),若以父類定義對象,動(dòng)態(tài)綁定子類對象,則父類對象的方法將隨綁定對象的不同而不同。利用多態(tài)性,可以使程序具有良好的擴(kuò)展性。Java中實(shí)現(xiàn)多態(tài)可以通過方法重載實(shí)現(xiàn)編譯時(shí)多態(tài)性(靜態(tài)多態(tài)),也可以通過對父類成員方法的重寫實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)性(動(dòng)態(tài)多態(tài))。316.6類的多態(tài)【6.10】重載求和的方法,分別求兩個(gè)整數(shù)、兩個(gè)實(shí)數(shù)和兩個(gè)雙精度實(shí)數(shù)的和。publicclassOverloadingDemo{ intadd(intx,inty){ returnx+y; } floatadd(floatx,floaty){ returnx+y; } doubleadd(doublex,doubley){ returnx+y; }}326.6類的多態(tài)publicclassOverloadingTest{ publicstaticvoidmain(String[]args){ OverloadingDemool=newOverloadingDemo(); System.out.println("add(5,5)="+ol.add(5,5)); System.out.println("add(7.5F,8.6F)="+ol.add(7.5F,8.6F)); System.out.println("add(3.5D,9.3D)="+ol.add(3.5D,9.3D)); }}33【6-11】運(yùn)行時(shí)多態(tài)舉例。publicinterfaceAnimal1{
voidshout();}publicclassCatimplementsAnimal1{
publicvoidshout(){ System.out.println("喵喵。。。"); }}publicclassBirdimplementsAnimal1{
publicvoidshout(){ System.out.println("喳喳。。。"); }}34【6-11】運(yùn)行時(shí)多態(tài)舉例。publicclassAnimalTest{ publicstaticvoidmain(String[]args){
Animal1an1=newCat();//Animal對象引用Cat對象
Animal1an2=new
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZHCA 025-2023 化妝品抗氧化人體測試方法
- 沈陽生姜種植與市場推廣2025年度聯(lián)合發(fā)展合同
- 2025年度自愿離婚協(xié)議書:子女撫養(yǎng)權(quán)及監(jiān)護(hù)責(zé)任協(xié)議
- 二零二五年度創(chuàng)新型企業(yè)員工股權(quán)激勵(lì)合同
- 2025年度金融服務(wù)違約賠償協(xié)議范本
- 2025年度美容院美容師職業(yè)保險(xiǎn)與福利合作協(xié)議
- 二零二五年度國際物流公司總經(jīng)理聘用協(xié)議
- 二零二五年度專業(yè)冷庫租賃與溫控技術(shù)支持協(xié)議
- 二零二五年度物流行業(yè)勞動(dòng)合同法更新及風(fēng)險(xiǎn)防范合同
- 二零二五年度心理咨詢服務(wù)連鎖機(jī)構(gòu)心理咨詢師聘用合同
- 人教版五年級數(shù)學(xué)下冊課后作業(yè)設(shè)計(jì) 2.4質(zhì)數(shù)和合數(shù)(解析版)
- 高??蒲泄芾韻徝嬖噯栴}及回答
- 小學(xué)體質(zhì)測試標(biāo)準(zhǔn)
- 機(jī)床安全操作培訓(xùn)課件
- 自動(dòng)化電氣控制方案
- 冷庫安全檢查內(nèi)容與評價(jià)標(biāo)準(zhǔn)
- (完整版)4.19天體運(yùn)動(dòng)綜合習(xí)題(帶答案)
- 人工智能的數(shù)學(xué)基礎(chǔ)
- 放射科未來五年發(fā)展規(guī)劃(2021-2025)
- 無人機(jī)項(xiàng)目商業(yè)計(jì)劃書
- 普通高中轉(zhuǎn)學(xué)表
評論
0/150
提交評論