




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)四類(lèi)的繼承性和多態(tài)性【開(kāi)發(fā)語(yǔ)言及實(shí)現(xiàn)平臺(tái)或?qū)嶒?yàn)環(huán)境】Windows2000或XP,JDK1.6與Eclipse【實(shí)驗(yàn)?zāi)康摹坷斫夂驼莆疹?lèi)的繼承和多態(tài)理解父類(lèi)和子類(lèi)的轉(zhuǎn)化?!緦?shí)驗(yàn)要求】1.掌握類(lèi)的繼承法和多態(tài)。2.掌握父類(lèi)和子類(lèi)的轉(zhuǎn)化。【實(shí)驗(yàn)內(nèi)容】一類(lèi)的繼承面向?qū)ο蟮闹凶顬閺?qiáng)大的功能是類(lèi)的繼承,繼承允許你在一個(gè)已經(jīng)存在的類(lèi)之上編寫(xiě)新的程序。比如想建立一個(gè)FillRect類(lèi),該類(lèi)可以使用Rectangle類(lèi)中所有已定義的數(shù)據(jù)和成員方法,如:width、height等數(shù)據(jù)和getArea等方法,就可以通過(guò)繼承來(lái)實(shí)現(xiàn)。為了繼承Rectangle類(lèi),你必須引用舊的Rectangle類(lèi)(使用extends關(guān)鍵字),并且在新類(lèi)的說(shuō)明中引用它。如:classFillRectextendsRectangle{…}1.VehicleDemo.java//類(lèi)的繼承classVehicle{//車(chē)輛類(lèi)intVehicleID;//性質(zhì):車(chē)輛的ID號(hào)voidsetID(intID){VehicleID=ID;}voiddisplayID(){//方法:顯示ID號(hào)System.out.println("車(chē)輛的號(hào)碼是:"+VehicleID);}}classCarextendsVehicle{//轎車(chē)類(lèi)intmph;//時(shí)速voidsetMph(intmph){this.mph=mph;}voiddisplayMph(){//顯示轎車(chē)的時(shí)速System.out.println("轎車(chē)的時(shí)速是:"+mph);}}publicclassVehicleDemo{publicstaticvoidmain(String[]args){//產(chǎn)生一個(gè)車(chē)輛對(duì)象Carbenz=newCar();benz.setID(9527);benz.setMph(10);benz.displayID();benz.displayMph();}}2.成員變量的隱藏和方法的重寫(xiě)子類(lèi)通過(guò)隱藏父類(lèi)的成員變量和重寫(xiě)父類(lèi)的方法,可以把父類(lèi)的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為,例如:classA{intx;voidsetX(){x=0;}}classBextendsA{intx;//隱藏了父類(lèi)的變量xvoidsetX(){//重寫(xiě)了父類(lèi)的方法setX()x=5;}}3.關(guān)鍵字super、Java中通過(guò)super來(lái)實(shí)現(xiàn)對(duì)父類(lèi)成員的訪(fǎng)問(wèn),super用來(lái)引用當(dāng)前對(duì)象的父類(lèi)。在擴(kuò)展類(lèi)的所有非靜態(tài)方法中均可使用super關(guān)鍵字。在訪(fǎng)問(wèn)字段和調(diào)用方法時(shí),super將當(dāng)前對(duì)象作為其超類(lèi)的一個(gè)實(shí)例加以引用。super的使用有三種情況:訪(fǎng)問(wèn)父類(lèi)被隱藏的成員變量,如:super.variable;調(diào)用父類(lèi)中被重寫(xiě)的方法,如:super.method([paramlist]);調(diào)用父類(lèi)的構(gòu)建器,如:super([paramlist]);SuperDemo.javaclassFather{intx;Father(){x=3;System.out.println("CallingFather:x="+x);}voiddoSomething(){System.out.println("CallingFather.doSomething()");}}classSonextendsFather{intx;Son(){//調(diào)用父類(lèi)的構(gòu)造方法//super()必須放在方法中的第一句super();x=5;System.out.println("CallingSon:x="+x);}voiddoSomething(){super.doSomething();//調(diào)用父類(lèi)的方法System.out.println("CallingSon.doSomething()");System.out.println("Father.x="+super.x+"Son.x="+x);}}publicclassSuperDemo{publicstaticvoidmain(Stringargs[]){Sonson=newSon();son.doSomething();}}程序運(yùn)行結(jié)果:CallingFather:x=3CallingSon:x=5CallingFather.doSomething()CallingSon.doSomething()Father.x=3Son.x=5二類(lèi)的多態(tài)性(1)編譯時(shí)多態(tài)。在編譯階段,編譯器會(huì)根據(jù)參數(shù)的不同來(lái)靜態(tài)確定調(diào)用相應(yīng)的方法,即具體調(diào)用哪個(gè)被重載的方法。(2)運(yùn)行時(shí)多態(tài)。由于子類(lèi)繼承了父類(lèi)所有的屬性(私有的除外),所以子類(lèi)對(duì)象可以作為父類(lèi)對(duì)象使用。程序中凡是使用父類(lèi)對(duì)象的地方,都可以用子類(lèi)對(duì)象來(lái)代替。一個(gè)對(duì)象可以通過(guò)引用子類(lèi)的實(shí)例來(lái)調(diào)用子類(lèi)的方法?!讨剌d方法的調(diào)用原則:Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用該方法的實(shí)例,來(lái)決定調(diào)用哪個(gè)方法。對(duì)子類(lèi)的一個(gè)實(shí)例,如果子類(lèi)重寫(xiě)了父類(lèi)的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用子類(lèi)的方法;如果子類(lèi)繼承了父類(lèi)的方法(未重寫(xiě)),則運(yùn)行時(shí)系統(tǒng)調(diào)用父類(lèi)的方法。1.SuberClass.javaclassBaseClass{publicBaseClass(){System.out.println("NowinBaseClass()");init();}publicvoidinit(){System.out.println("NowinBaseClass.init()");}}publicclassSuberClassextendsBaseClass{publicSuberClass(){System.out.println("NowinSuberClass()");}publicvoidinit(){System.out.println("NowinSuberClass.init()");}publicstaticvoidmain(String[]args){System.out.println("創(chuàng)建BaseClass對(duì)象:");newBaseClass();System.out.println("創(chuàng)建SuberClass對(duì)象:");newSuberClass();}}程序運(yùn)行結(jié)果:創(chuàng)建BaseClass對(duì)象:NowinBaseClass()NowinBaseClass.init()創(chuàng)建SuberClass對(duì)象:NowinBaseClass()NowinSuberClass.init()NowinSuberClass()三.static有時(shí)候,可能需要同類(lèi)的各對(duì)象之間共享某些變量或者方法,這些共享的變量或是方法被稱(chēng)為類(lèi)變量或者類(lèi)方法。類(lèi)變量或者類(lèi)方法統(tǒng)稱(chēng)為靜態(tài)對(duì)象。實(shí)例√每個(gè)實(shí)例對(duì)象對(duì)類(lèi)變量的改變都會(huì)影響到其他的實(shí)例對(duì)象。類(lèi)變量可通過(guò)類(lèi)名直接訪(fǎng)問(wèn),無(wú)需先生成一個(gè)實(shí)例對(duì)象,也可以通過(guò)實(shí)例對(duì)象訪(fǎng)問(wèn)類(lèi)變量?!填?lèi)方法不能訪(fǎng)問(wèn)實(shí)例變量,只能訪(fǎng)問(wèn)類(lèi)變量。類(lèi)方法可以由類(lèi)名直接調(diào)用,也可由實(shí)例對(duì)象進(jìn)行調(diào)用。類(lèi)方法中不能使用this或super關(guān)鍵字。√靜態(tài)變量可以有初值,就象實(shí)例變量一樣。靜態(tài)變量和方法都是通過(guò)類(lèi)名字來(lái)訪(fǎng)問(wèn)的。為方便起見(jiàn),也可以用具體對(duì)象來(lái)訪(fǎng)問(wèn)。例3.3.2StaticDemo2.java//靜態(tài)成員的使用classStaticDemo2{//實(shí)例變量inti;//靜態(tài)變量staticintj;staticintarr[]=newint[12];//靜態(tài)初始成員,初始化數(shù)組static{for(inti=0;i<arr.length;i++)arr[i]=i;}//實(shí)例方法voidsetI(inti){this.i=i;}//靜態(tài)方法staticvoidsetJ(intj){StaticDemo2.j=j;}publicstaticvoidmain(String[]args){StaticDemo2sd2=newStaticDemo2();StaticDemo2.j=2;//正確:通過(guò)類(lèi)訪(fǎng)問(wèn)靜態(tài)變量sd2.j=3;//正確:通過(guò)實(shí)例訪(fǎng)問(wèn)靜態(tài)變量StaticDemo2.setJ(2);//正確:通過(guò)類(lèi)訪(fǎng)問(wèn)靜態(tài)方法sd2.setJ(3);//正確:通過(guò)實(shí)例訪(fǎng)問(wèn)靜態(tài)方法sd2.i=4;//正確:通過(guò)實(shí)例訪(fǎng)問(wèn)實(shí)例變量sd2.setI(7);//正確:通過(guò)實(shí)例訪(fǎng)問(wèn)實(shí)例方法StaticDemo2.i=5;//錯(cuò)誤:通過(guò)類(lèi)訪(fǎng)問(wèn)實(shí)例變量StaticDemo2.setI(5);//錯(cuò)誤:通過(guò)類(lèi)訪(fǎng)問(wèn)實(shí)例方法}}【完成實(shí)驗(yàn)項(xiàng)目】 1.三角形、梯形和圓形的類(lèi)封裝實(shí)驗(yàn)要求:編寫(xiě)一個(gè)Java應(yīng)用程序,該程序中有3個(gè)類(lèi):Trangle、Leder和Circle,分別用來(lái)刻畫(huà)“三角形”、“梯形”和“圓形”。具體要求如下:a) Trangle類(lèi)具有類(lèi)型為double的三個(gè)邊,以及周長(zhǎng)、面積屬性,Trangle類(lèi)具有返回周長(zhǎng)、面積以及修改三個(gè)邊的功能。另外,Trangle類(lèi)還具有一個(gè)boolean型的屬性,該屬性用來(lái)判斷三個(gè)屬能否構(gòu)成一個(gè)三角形。b) Lader類(lèi)具有類(lèi)型double的上底、下底、高、面積屬性,具有返回面積的功能。c) Circle類(lèi)具有類(lèi)型為double的半徑、周長(zhǎng)和面積屬性,具有返回周長(zhǎng)、面積的功能。假如我們?cè)陂_(kāi)發(fā)一個(gè)系統(tǒng)時(shí)需要對(duì)員工進(jìn)行建模,員工包含3個(gè)屬性:姓名、工號(hào)以及工資。經(jīng)理也是員工,除了含有員工的屬性外,另外還有一個(gè)獎(jiǎng)金屬性。請(qǐng)使用繼承的思想設(shè)計(jì)出員工類(lèi)和經(jīng)理類(lèi)。要求類(lèi)中提供必要的方法進(jìn)行屬性訪(fǎng)問(wèn)。classTrangle{ privatedoublea; privatedoubleb; privatedoublec;voidSetgetArea(){ doubles; s=(a+b+c)/2; s=(s*(s-a)*(s-b)*(s-c)); System.out.println(Math.sqrt(s));}voidSetgetzhouchang(){ doublep; p=a+b+c; System.out.println(p);}voidSetA(doubleA){ a=A;}voidSetB(doubleB){ b=B;}voidSetC(doubleC){ c=C;}}classLeder{ privatedoublea; privatedoubleb; private
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)三相可控硅直流調(diào)速裝置數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)HIPS塑膠料數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 勞動(dòng)合同(20XX年完整版)
- 遺產(chǎn)繼承金融資產(chǎn)管理合同(2篇)
- 采購(gòu)與分包管理合同(2篇)
- 高等教育自學(xué)考試《00074中央銀行概論》模擬試卷三
- 新浪樂(lè)居萬(wàn)達(dá)中央旅游城歲末營(yíng)銷(xiāo)方案
- 《人工智能應(yīng)用與發(fā)展:高中人工智能學(xué)習(xí)指南》
- 商業(yè)推廣項(xiàng)目合作協(xié)議書(shū)
- 環(huán)保技術(shù)研發(fā)與推廣戰(zhàn)略合作協(xié)議
- 控制計(jì)劃課件教材-2024年
- 川教版2024-2025學(xué)年六年級(jí)下冊(cè)信息技術(shù)全冊(cè)教案
- 第45屆世界技能大賽移動(dòng)機(jī)器人項(xiàng)目福建省選拔賽技術(shù)文件(定稿)
- 招標(biāo)代理機(jī)構(gòu)遴選投標(biāo)方案(技術(shù)標(biāo))
- 彩鋼瓦雨棚施工技術(shù)標(biāo)準(zhǔn)方案
- 2024年新疆(兵團(tuán))公務(wù)員考試《行測(cè)》真題及答案解析
- 吊車(chē)施工專(zhuān)項(xiàng)方案
- 三級(jí)安全教育試題(公司級(jí)、部門(mén)級(jí)、班組級(jí))
- 罐區(qū)安全培訓(xùn)教程
- 副總經(jīng)理招聘面試題與參考回答(某大型央企)2025年
- 2024新能源風(fēng)電場(chǎng)消防系統(tǒng)檢修規(guī)程
評(píng)論
0/150
提交評(píng)論