




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
一、實(shí)驗(yàn)?zāi)康?深入理解類的繼承的基本概念及實(shí)現(xiàn)。.了解Object及對Object類的主要方法equals進(jìn)行重寫。.掌握super關(guān)鍵字的作用。.掌握抽象類與接口的基本概念及實(shí)際應(yīng)用.掌握對象多態(tài)性的作用。.掌握接口的基本概念及實(shí)際應(yīng)用。.掌握接口回調(diào)的概念及運(yùn)行機(jī)制。二、實(shí)驗(yàn)內(nèi)容及步驟1、重寫Object類的equals方法□□□:□□□□□Object類的equals方法進(jìn)行Person對象的比較操作。⑴源代碼如下:classPerson{privateStringname;privateintage;publicPerson(Stringname,intage){=name;this.age=age;}//getter與setter方法略。publicStringtoString(){return"姓名:"++";年齡:"+this.age;}}publicclassPersonDemo{publicstaticvoidmain(Stringargs[]){Personpersonl=newPerson(“李興華”,30);Personperson2=newPerson(“李興華”,30);System.out.println(person1.equals(person2)?"是同一個(gè)人。":"□□□□□□□");}}⑵編譯并運(yùn)行應(yīng)用程序。運(yùn)行結(jié)果:(3)實(shí)驗(yàn)報(bào)告將運(yùn)行結(jié)果寫在實(shí)驗(yàn)報(bào)告中。思考:應(yīng)用程序中personl對象調(diào)用的equals方法是從哪個(gè)類繼承的,請查看源代碼,說明此equals方法的作用,即比較的內(nèi)容。答:personl對象調(diào)用的equals方法是從Object類繼承的。此equals方法的目的是通過boolean判斷兩對象內(nèi)存地址是否相同。任務(wù)二:修改上述源代碼Person類,使PersonDemo應(yīng)用程序執(zhí)行結(jié)果為“同一個(gè)人”。提示:equals方法的原型是:publicbooleanequals(Objectobj){}源代碼:publicbooleanequals(Objectobj){if(obj==null||!(objinstanceofPerson)){returnfalse;}if(((Person)obj).name==&&((Person)obj).age==this.age){returntrue;}returnfalse;}運(yùn)行結(jié)果:2、對象的上轉(zhuǎn)型對象任務(wù)一:對象的上轉(zhuǎn)型對象接收任意子類類型的對象(1)使用Object接收一切的引用類型對象。源代碼:classA{publicStringgetInfo(){return“HelloWorld!!!”;}}publicclassADemo{publicstaticvoidmain(Stringargs[]){Objectobj=newA();System.out.println(obj.getInfo());System.out.println(obj.toString());Aa=(A)obj;System.out.println(a.getInfo());System.out.println(a.toString());}}⑵編譯并運(yùn)行程序。運(yùn)行結(jié)果:⑶實(shí)驗(yàn)報(bào)告將運(yùn)行結(jié)果寫在實(shí)驗(yàn)報(bào)告中。如果程序編譯為通過,或運(yùn)行時(shí)有錯(cuò)誤提示,請說明原因,并將錯(cuò)誤改正。答:錯(cuò)誤:ThemethodgetInfo()isundefinedforthetypeObjectgetInfoaddcasttoObjSystem.outprintln(((A)obj).getInfo());
addcasttoObj任務(wù)二:上轉(zhuǎn)型實(shí)現(xiàn)多態(tài)性(1)實(shí)例學(xué)習(xí)令不使用上轉(zhuǎn)型對象實(shí)現(xiàn)多態(tài)性源代碼如下:源代碼:packagerenwu3;classA{publicvoidfun1(){System.out.println("A-->publicvoidfun1(){}");publicvoidfun2(){this.fun1();二e…classBextendsA{publicvoidfun1(){System.out.println("B-->publicvoidfun1(){}");}publicvoidfun3(){System.out.println("B-->publicvoidfun3(){}");}};packagerenwu3;classCextendsA{publicvoidfun1(){System.out.println("C-->publicvoidfun1(){}");}publicvoidfun5(){System.out.println("C-->publicvoidfun3(){}");}};packagerenwu3;publicclassPolDemo4{
publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubfun(newB());//傳遞B類實(shí)例fun(newC());//傳遞C類實(shí)例publicstaticvoidfun(Bb){b.fun1();//統(tǒng)一調(diào)用覆寫父類的fun1()方法publicstaticvoidfun(Cc){}}w);運(yùn)行結(jié)果:以上程序雖然實(shí)現(xiàn)了基本的要求,但是可以發(fā)現(xiàn):如果按照以上的方式完成程序,則當(dāng)產(chǎn)生一個(gè)A類的子類時(shí),fun()方法就要重載一次,這樣如果功能擴(kuò)充,則必須要修改類本身,那么如果使用對象多態(tài)性完成呢?令使用上轉(zhuǎn)型對象實(shí)現(xiàn)多態(tài)性:源代碼:packagerenwu1;classA{publicvoidfun1(){System.out.println("a-->publicvoidfun1(){}");}publicvoidfun2(){this.fun1();}};packagerenwu1;classBextendsA{publicvoidfun1(){System.out.println("B-->publicvoidfun1(){}");publicvoidfun3(){System.out.println("B-->publicvoidfun3(){}");一classCextendsA{publicvoidfun1(){System.out.println("C-->publicvoidfun1(){}");publicvoidfun5(){System.out.println("C-->publicvoidfun3(){}");…e3publicclassPolDemo05{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubfun(newB());//傳遞B類實(shí)例,產(chǎn)生向上轉(zhuǎn)型fun(newC());//傳遞C類實(shí)例,產(chǎn)生向上轉(zhuǎn)型}publicstaticvoidfun(Aa){〃接收父類對象a.fun1();}}運(yùn)行結(jié)果:(2)閱讀上述兩個(gè)源代碼,深刻理解使用上轉(zhuǎn)型對象實(shí)現(xiàn)多態(tài)性機(jī)制。答:上轉(zhuǎn)型:是子類對象由父類引用。想要上轉(zhuǎn)型的前提必須是由繼承關(guān)系的兩個(gè)類,在調(diào)用方法的時(shí)候,上轉(zhuǎn)型對象只能調(diào)用父類中有的方法,如果調(diào)用子類方法則會報(bào)錯(cuò)。3、抽象類與上轉(zhuǎn)型對象練習(xí)任務(wù)一:通過對上述實(shí)驗(yàn)內(nèi)容的實(shí)踐與學(xué)習(xí),根據(jù)要求填寫代碼。⑴要求:有一家公司,有不同類型的員工,包括按年領(lǐng)取薪水,按月領(lǐng)取薪水,按周領(lǐng)取薪水,計(jì)算該公司一年需支付的薪水總額令有一個(gè)abstract類,類名為Employee;令該類有一個(gè)abstract方法:publicabstractdoubleearnings();;令Employee的子類有YearWorker、MontthWorker和WeekWorker。YearWorker對象按年領(lǐng)取薪水,MonthWorker按月領(lǐng)取薪水,WeekWorker按周領(lǐng)取薪水。令子類必須實(shí)現(xiàn)父類的earningsO方法,返回各自領(lǐng)取薪水?dāng)?shù)。令有一個(gè)Company類,該類用employee數(shù)組作為成員,employee數(shù)組的單元可以是YearWorker對象的上轉(zhuǎn)型對象、MonthWorker對象的上轉(zhuǎn)型對象或WeekWorker對象的上轉(zhuǎn)型對象。令程序能輸出Company對象一年需要支付的薪水總額。(2)代碼模板源代碼:packagerenwu2;publicclassCompany{Employee]]employee;doublesalaries=0;Company(Employee[]employee){this.employee=employee;}publicdoublesalariesPay(){salaries=0;for(inti=0;i<employee.length;i++){salaries=salaries+employee[i].earnings();}returnsalaries;}}packagerenwu2;abstractclassEmployee{publicabstractdoubleearnings();packagerenwu2;publicclassWeekWorkerextendsEmployee{publicdoubleearnings(){return52*1000;一publicclassMonthworkerextendsEmployee{publicdoubleearnings(){return12*5000;}}packagerenwu2;publicclassYearWorkerextendsEmployee{publicdoubleearnings(){return120000;}}packagerenwu2;publicclassHardWork{publicstaticvoidmain(String[]args){Employee口employee=newEmployee[20];//公司有20名職員for(inti=0;i<employee.length;i++){if(i%3==0)employee[i]=newWeekWorker();elseif(i%3==1)employee[i]=newMonthWorker();elseif(i%3==2)employee[i]=newYearWorker();}Companycompany=newCompany(employee);System.out.println("公司年工資總額:"+company.salariesPay()+"元");}}運(yùn)行結(jié)果:(3)實(shí)驗(yàn)報(bào)告將代碼1-4寫在實(shí)驗(yàn)報(bào)告中。在Employee類的子類中合適位置使用super,再運(yùn)行程序。根據(jù)查看的結(jié)果,驗(yàn)證在子類中是否可以調(diào)用抽象類父類的構(gòu)造方法,即抽象類是否有構(gòu)造方法?答:子類可以調(diào)用抽象類父類的構(gòu)造方法。4、接口案例學(xué)習(xí)任務(wù)一:學(xué)習(xí)下面實(shí)例,定義一個(gè)抽象的汽車類car,再將汽油車設(shè)計(jì)為接口。該程序代碼如下:importjava.awt.Color;//汽車抽象類publicabstractclassCar{〃公用數(shù)據(jù)字段聲明區(qū)publicColorcolor;〃車輛顏色publicintgearNum;〃排檔數(shù)publicStringtiretype;〃輪胎型號publicfloatengine;〃引擎排氣量〃公用抽象方法聲明區(qū)publicabstractvoidshiftgear();〃換檔publicabstractvoidbrake();〃煞車publicabstractvoidaircon();〃開冷氣publicabstractvoidheadlight();〃開大燈}publicinterfaceGasoline〃汽油車接口{publicstaticfinalStringFUEL="gasoline(汽油)";〃定義一個(gè)最終字段publicvoidrefuel();//聲明一個(gè)方法}源代碼:packagerenwu3;publicclassGearextendsCar{staticintgearNum=5;//聲明gearNum為類欄publicGcar(){tiretype="BridgeStone185ST”;//輪胎型號engine=1598.5f;//排氣量}publicstaticvoidmain(Stringargs[]){Geargcar=newGcar();//產(chǎn)生實(shí)例gcar.equipment();gear.shiftgear();gear.brake();}publicvoidequipment。{//轎車的配置System.out.println("轎車顏色:"+eolor);System.out.println("轎車排擋數(shù):"+gearNum);System.out.println("轎車輪胎型號:"+tiretype);System.out.println("轎車排氣量:"+engine);}publicvoidshiftgear(){System.out.println("轎車換擋方式:自排"+gearNum+"文件");}//換擋publicvoidbrake(){System.out.println("水壓式剎車系統(tǒng)");}//剎車publicvoidaireon(){};//開冷氣publicvoidheadlight(){};//開大燈}任務(wù)二:(1)根據(jù)以上代碼,定義你自己的車,該車?yán)^承自汽車類car并實(shí)現(xiàn)汽油車接口。自己的車屬性為:檔位為5個(gè)檔,輪胎型號是BridgeStone185ST,排氣量為1598.5。自己的車的新增的方法有:equipment。:輸出轎車顏色、轎車排檔數(shù)、轎車輪胎型號、轎車排氣量和轎車燃料。
源代碼:packagerenwu3;importjava.awt.Color;〃汽車抽象類publicclassMyCarextendsGcar{privateColorcolor;publicMyCar(){color=Color.blue;//設(shè)置汽車顏色}publicstaticvoidmain(Stringargs[]){MyCarmycar=newMyCar();mycar.equipment();mycar.shiftgear();mycar.brake();}publicvoidequipment。{System.out.println("我的車排擋數(shù):"+this.gearNum);System.out.println("我的車顏色:"+this.color);System.out.println("我的車輪胎型號:"+this.tiretype);System.out.println("我的車引擎排氣量:"+this.engine);}publicvoidshiftgear(){//換擋-覆蓋的新方式System.out.println("我的車換擋方式:自排"+計(jì)15.gearNum+"檔");}?Overridepublicvoidbrake(){//TODOAuto-generatedmethodstub}?Overridepublicvoidaircon(){//TODOAuto-generatedmethodstub}?Overridepublicvoidheadlight(){//TODOAuto-generatedmethodstub}}(2)實(shí)驗(yàn)報(bào)告將任務(wù)二的代碼寫在實(shí)驗(yàn)報(bào)告中。編寫應(yīng)用程序測試實(shí)現(xiàn)類。運(yùn)行結(jié)果:
⑵注意:在實(shí)現(xiàn)接口時(shí),要實(shí)現(xiàn)所有接口中定義的所有方法,方法的實(shí)現(xiàn)可以具有具體的實(shí)現(xiàn)內(nèi)容,也可以是抽象的方法,即只有方法名或參數(shù),沒有變量、沒有具體操作語句,只有一對大括號{}的空方法。5、接口的回調(diào)任務(wù)一:有一家商店銷售電視、計(jì)算機(jī)和手機(jī),計(jì)算該商店的年銷售總額(1)要求:令有一個(gè)ComputeTotalSales接口,該接口中有一個(gè)方法:publicdoubletotalSalesByYear();令有三個(gè)實(shí)現(xiàn)該接口的類:Television,Computer和Mobile。這三個(gè)類通過實(shí)現(xiàn)接口computeTotalSales給出自己的年銷售額。令有一個(gè)Shop類,該類用computeTotalSales數(shù)組作為成員,computeTotalSales數(shù)組的單元可以存放Television對象的引用或Mobile對象的引用。令編寫應(yīng)用程序輸出Shop對象的年銷售額。⑵代碼模板源代碼:interfaceComputeTotalSales{publicdoubletotalSalesByYear();}classTelevisionimplementsComputeTotalSales{publicdoubletotalSalesByYear(){//實(shí)現(xiàn)totalSalesByYear()方法return60000;}classComputeimplementsComputeTotalSales
publicdoubletotalSalesByYear(){publicdoubletotalSalesByYear(){//實(shí)現(xiàn)totalSalesByYear()方法return10000;}classMobileimplementsComputeTotalSales{publicdoubletotalSalesByYear(){//實(shí)現(xiàn)totalSalesByYear()方法return50000;}classShop{ComputeTotalSales[]goods;doubletotalSales=0;Shop(ComputeTotalSales[]goods){this.goods=goods;}publicdoublegiveTotalSales(){totalSales=0;for(inti=0;ivgoods.length;i++){//計(jì)算totalSalestotalSales=totalSales+goods[i].totalSalesByYear();}returntotalSales;}}publicclassHappySale{publicstaticvoidmain(Stringargs[]){ComputeTotalSales口goods=newComputeTotalSales[3];for(inti=0;i<goods.length;i++){if(i%3==0)goods[i]=newTelevision();elseif(i%3==1)goods[i]=newComputer();elseif(i%3==2)goods[i]=newMobile();}Shopshop=newShop(goods);System.out.println("商店年銷售額:"+shop.giveTotalSales());}}運(yùn)行結(jié)果:*任務(wù)二:利用接口回調(diào)和反射獨(dú)立編程。(1)內(nèi)容及要求>假定現(xiàn)有兩種工具:Car和Plane,其中Car的平均速度運(yùn)算公式為:a*b/c;Plane的平均速度運(yùn)算公式為:a+b+的三個(gè)參數(shù)的具體值在程序運(yùn)行時(shí)用戶錄入。>編寫ComputeTime類,通過該類計(jì)算用戶指定的交通工具運(yùn)行1000公里所需的時(shí)間。參數(shù)的具體值在程序運(yùn)行時(shí)用戶錄入。>其運(yùn)行過程如下,從命令行輸入ComputeTime的四個(gè)參數(shù),第一個(gè)是交通工具的類型,第二、三、四個(gè)參數(shù)分別時(shí)整數(shù)A、B、C,舉例如下:計(jì)算Plane的時(shí)間:"javaComputeTimePlane203040"。計(jì)算Car的時(shí)間:"javaComputeTimeCar233445"。>編程要求:在未來如果增加第3種交通工具的時(shí)候,只需要編寫新的交通工具的程序。如第3種交通工具為Ship,則只需要編寫Ship.java,運(yùn)行時(shí)輸入:"javaComputeTimeShip223344”。充分利用接口及接口回調(diào)的技術(shù)。?提示:實(shí)例化一個(gè)對象的另外一種辦法:Class.forName(str).newInstance();例如需要實(shí)例化一個(gè)Plane對象:Planeplane=(Plane)Class.forName("Plane").newInstance()(2)實(shí)驗(yàn)報(bào)告源代碼:packagerenwu5;importrenwu5.all.Common;importjava.lang.*;publicclassComputeTime{publicstaticvoidmain(Stringargs[]){System.out.println("交通工具:"+args[0]);System.out.println("參數(shù)a:"+args[1]);System.out.println("參數(shù)b:"+args[2]);System.out.println("參數(shù)c:"+args[3]);doublea=Double.parseDo
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國6-氨基己酸數(shù)據(jù)監(jiān)測報(bào)告
- 2025年中國15%甲硫.霉威懸浮劑數(shù)據(jù)監(jiān)測報(bào)告
- 2025至2030年中國高效脫硫麻石水膜除塵器市場分析及競爭策略研究報(bào)告
- 2025至2030年中國門框滾壓成型機(jī)市場分析及競爭策略研究報(bào)告
- 2025至2030年中國金屬清洗兼防銹劑市場分析及競爭策略研究報(bào)告
- 2025至2030年中國視頻資料服務(wù)管理系統(tǒng)市場分析及競爭策略研究報(bào)告
- 2025至2030年中國膠帶輸送自動調(diào)偏器市場分析及競爭策略研究報(bào)告
- 2025至2030年中國管道自動增壓泵市場分析及競爭策略研究報(bào)告
- 2025至2030年中國白晶粉市場分析及競爭策略研究報(bào)告
- 2025至2030年中國浮雕雙龍棍劍市場分析及競爭策略研究報(bào)告
- PSS的生產(chǎn)工藝及原理課件
- 2023-2024學(xué)年浙江省富陽市小學(xué)數(shù)學(xué)五年級下冊期末自測試卷
- 防火墻安全策略檢查表
- 研究借鑒晉江經(jīng)驗(yàn)-加快縣域經(jīng)濟(jì)發(fā)展
- GB/T 12706.4-2020額定電壓1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)擠包絕緣電力電纜及附件第4部分:額定電壓6 kV(Um=7.2 kV)到35 kV(Um=40.5 kV)電力電纜附件試驗(yàn)要求
- 2023年鎮(zhèn)江丹陽市民政局系統(tǒng)事業(yè)單位招聘筆試模擬試題及答案
- 國開電大 操作系統(tǒng) 實(shí)驗(yàn)4:文件管理實(shí)驗(yàn)報(bào)告
- 北京理工附中小升初分班考試真題
- 安徽省小學(xué)學(xué)生學(xué)籍表
- 無創(chuàng)腦血氧監(jiān)護(hù)儀技術(shù)審評報(bào)告
- 糖尿病足的診斷與治療ppt課件
評論
0/150
提交評論