14401048方萍3班實驗4_第1頁
14401048方萍3班實驗4_第2頁
14401048方萍3班實驗4_第3頁
免費預覽已結束,剩余10頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Java程序設計實驗四:繼承、多態和接口1. 提交期限和方法期限:第12周周五(2015-11-27)23:59pm方法:由學習委員收集所有學生的實驗報告,以電子檔的形式提交給任課教師(發郵箱:)。2. 實驗目的及要求掌握Java的基本數據類型、運算符、表達式和語句。運行環境:JDK1.7開發環境:Eclipse實驗內容及題目3.1子類的繼承和方法的重寫【題1中國人和美國人】在Eclipse中創建名為Lab4的新項目,編寫程序模擬中國人、美國人、北京人。除主類外,程序中有4個類:People、ChinaPeople、AmericanPeople和BeijingPeople類。要求如下:(1)P

2、eople類有權限是protected的double型成員變量:height和weight,以及publicvoidspeakHello()、publicvoidaverageHeight()禾口publicvoidaverageWeight()方法。2)ChinaPeople類是People類的子類,新增了publicvoidchinaGongfu()方法。要求ChinaPeople重寫父類的publicvoidspeakHello()、publicvoidaverageHeight()禾口publicvoidaverageWeight()方法。(3) AmericanPeople類是Peo

3、ple的子類,新增publicvoidamericanBoxing()方法。要求AmericanPeople重寫父類的publicvoidspeakHello()>publicvoidaverageHeight()禾口publicvoidaverageWeight()方法。(4) BeijingPeople類是ChinaPeople的子類,新增publicvoidbeijingOpera()方法。要求BeijingPeople重寫父類的publicvoidspeakHello()、publicvoidaverageHeight()禾口publicvoidaverageWeight()方法

4、。Java程序代碼。運行效果如下圖。按下列代碼模板要求,將【代碼】部分替換為G:aEkakpIc肚好Houdnrin耐£陽丘対身肓江3.州厘米ftiw:picfliiuwFM靶hrI甘吐:iW,01eft北瓦人戲平卻豐高注72J1Xftnrr,irr>n,swrRkg部分代碼已給出:/People.javapublicclassPeopleprotecteddoubleweight,height;publicvoidspeakHello()System.out.println("yayayaya");publicvoidaverageHeight()heig

5、ht=173;System.out.println("averageheight:"+height);publicvoidaverageWeight()weight=70;System.out.println("averageweight:"+weight);/ChinaPeople.javapublicclassChinaPeopleextendsPeoplepublicvoidspeakHello()System.out.println("您好");publicvoidaverageHeight()(”中國人平均身高:"

6、+height+"厘米");重寫publicvoidaverageWeight()方法,輸出:"中國人平均體重:65公斤"/【代碼1】publicvoidchinaGongfu()System.out.println("坐如鐘,站如松,睡如弓");/AmericanPeople.javapublicclassAmericanPeopleextendsPeople重寫publicvoidspeakHello()方法,輸出"Howdoyoudo"/【代碼2】重寫publicvoidaverageHeight()方法,輸

7、出"American'saverageheight:176cm"/【代碼3】publicvoidaverageWeight()System.out.println("American'saverageweight:"+weight+"kg");weight=75;weight=75;publicvoidamericanBoxing()(”直拳、勾拳、組合拳”);/BeijingPeople.javapublicclassBeijingPeopleextendsChinaPeople重寫publicvoidaverage

8、Height()方法,輸出"北京人的平均身高:172.5厘米/【代碼4】重寫publicvoidaverageWeight()方法,輸出"北京人的平均體重:70公斤"/【代碼5】publicvoidbeijingOpera()(”花臉、青衣、花旦和老生”);/Example.javapublicclassExamplepublicstaticvoidmain(Stringargs)ChinaPeoplechinaPeople=newChinaPeople();AmericanPeopleamericanPeople=newAmericanPeople();Beij

9、ingPeoplebeijingPeople=newBeijingPeople();chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight();beijingPeople.averageHeight();chinaPeople.averageWeight();americanPeople.averageWeight();beijingPeople.averageWeight();

10、chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera();beijingPeople.chinaGongfu();【本題知識點】子類的繼承性;子類對象的創建過程;1. 方法的繼承和重寫。【實驗指導】如果子類可以繼承父類的方法,子類就有權利重寫這個方法,子類通過重寫父類的方法可以改變方法的具體行為。1. 方法重寫時一定要保證方法的名字、類型、參數個數和類型同父類的某個方法完全相同,只有這樣,子類繼承的這個方法才被隱藏。2. 子類在重寫方法時,不可以將實例方法更改成類方法,也不可以將

11、類方法更改為實例方法,即如果重寫的方法是static方法,static關鍵字必須要保留;如果重寫的方法是實例方法,重寫時不可以用static修飾該方法。【學生解答】(1)程序代碼:【代碼1】publicvoidaverageWeight()weight=65;System.out.println("中國人平均體重:"+weight+"公斤");【代碼2】publicvoidspeakHello()System.out.println("Howdoyoudo");【代碼3】publicvoidaverageHeight()height=

12、176;System.out.println("American'saverageheight:"+height+"cm");【代碼4】publicvoidaverageHeight()height=172.5;(“北京人平均身高:"+height+"厘米");【代碼5】publicvoidaverageWeight()weight=70;System.out.println("北京人平均體重:"+weight+"公斤");(2)運行結果截圖:rS9琶理員:匚人Windmd.e

13、we|口|回|亙:1doyoudo帀國人平均身髙=16飢沖厘米Amierlcdii*辱dueratjtslielgliBr:丄Tfin.OevjAlvneirxcan&a.vei*<agieueicfhtk爭北京人平均件董EM公斤險如鐘,站如拾_睡如烏曆淳套¥艮壽老生半如鐘"站如牡睦如弓I:Lab4src.Jhhr【思考題(選做)】People類中的publicvoidspeakHello(),publicvoidaverageHeight(),publicvoidaverageWeight()三個方法的方法體中的語句是否可以省略?【答:】可以省略.3.2成員

14、變量隱藏和super關鍵字【題2銀行和利息】在Lab4項目中,編寫程序。驗證教材第5章81頁的【例5-7】。假設銀行Bank已經有了按整年year計算利息的一般方法,其中year只能取正整數。如按整年計算的方法:Doublecompuerlnterest()interest=year*0.35*savedMoney;returninterest;建設銀行的天利息計算公式為:dayInterst=天數*0.0001*存款數大連銀行的天利息計算公式為:daylnterst=天數*0.00012*存款數參照例子中的建設銀行或大連銀行,再編寫一個商業銀行,讓程序輸出8000元存在商業銀行8年零236天

15、的利息。【知識點】成員變量隱藏和方法重寫;1. super關鍵字。【實驗指導】當super調用被隱藏的方法時,該方法中出現的成員變量是被子類隱藏的成員變量或繼承的成員變量。1. 子類不繼承父類的構造方法,因此,子類在其構造方法中需使用super來調用父類的構造方法,而且super必須是子類構造方法中的頭一條語句,即如果在在子類的構造方法中,沒有明顯地寫出super關鍵字來調用父類的某個構造方法,那么默認有“super();”。2. 類中定義多個構造方法時,建議包括一個不帶參數的構造方法,以便子類可以省略“super();”。【學生解答】(1)商業銀行的程序代碼:classBankintsave

16、dMoney;intyear;doubleinterest;publicdoublecomputerInterest()interest=year*0.035*savedMoney;returninterest;classBusinessBankextendsBankdoubleyear;publicdoublecomputerInterest()super.year=(int)year;doubleremainNumber=year-(int)year;intday=(int)(remainNumber*1000);interest=puterInterest()+day*0.0001*sa

17、vedMoneySystem.out.printf("%d元存在商業銀行d年零d天的利息:%.2f元n",savedMoney,super.year,day,interest);returninterest;publicclassExample5_2publicstaticvoidmain(Stringargs)BusinessBankbank1=newBusinessBank();bank1.savedMoney=8000;bank1.year=5.236;doubleinterest1=puterInterest();(2)商業銀行的運行結果截圖:B存稈商JiWft年審

18、四莎天的刑息i1588.00_,1s>TTJ.T3.3接口【題3歌手大賽和學生體重評估】在Lab4項目中,編寫程序,要求模擬歌手大賽計算選手成績和評估班級學生體重。歌手大賽計算選手成績的方法是去掉一個最高分和一個最低分后再計算平均分,而學校評估一個班級的學生的體重時,是計算全班同學的平均體重。SongGame類和School類都實現了ComputerAverage接口,但實現方式不同。ComputerAverage類和Estimator主類的部分代碼已給出(如下),按下列代碼模板要求,將【代碼】部分替換為Java程序代碼,并寫出SongGame類和School類。/ComputerAve

19、rage.javapublicinterfaceComputerAverage/接口publicdoubleaverage(doublex);/Estimator.javapublicclassEstimator主類publicstaticvoidmain(Stringargs)doublea=9.89,9.88,9.99,9.12,9.69,9.76,8.97;doubleb=56,55.5,65,50,51.5,53.6,70,49,66,62,46;ComputerAveragecomputer;computer=newSongGame();/computer調用average(doub

20、lex)方法,將數組a傳遞給參數x/【代碼1】System.out.printf("%n");System.out.printf("歌手最后得分:%5.3fn",result);computer=newSchool();/computer調用average(doublex)方法,將數組b傳遞給參數x/【代碼2】System.out.printf("學生平均體重:%5.2fkg",result);運行效果如下圖。:X?hangDbektn|pLah4JauacEsitlinaltni*.Jaua-Mlsnrshrtriyeskcudii

21、iab4J>J<tudEtliidtor【知識點】1. 接口體中只有常量的聲明(沒有變量)和抽象方法聲明。而且接口體中所有的常量的訪問權限一定都是public(允許省略public、final修飾符)、所有的抽象方法的訪問權限一定都是public(允許省略public、abstract修飾符)。2. 類實現接口,以便綁定接口中的方法。一個類可以實現多個接口,類通過使用關鍵字implements聲明自己實現一個或多個接口。如果一個非抽象類實現了某個接口,那么這個類必須重寫的所有方法。【實驗指導】可以把實現某一接口的類創建的對象的引用賦給該接口聲明的接口變量中,那么該接口變量就可以調用

22、被類實現的接口方法。1. 接口產生的多態就是指不同類在實現同一個接口時可能具有不同的實現方式。【學生解答】(1)程序代碼:【代碼1】doubleresult=computer.average(a);【代碼2】result=computer.average(b);/SongGame.javaclassSongGameimplementsComputerAveragepublicdoubleaverage(doublex)doublemin=10,max=-20,sum=0;for(inti=0;i<x.length;i+)if(xi<=min)min=xi;if(xi>=max

23、)max=xi;sum+=xi;sum=sum-min-max;sum=(double)(sum/(x.length-2);returnsum;/School.javaclassSchoolimplementsComputerAveragepublicdoubleaverage(doublex)3.4接口回調(選做)【題4(選做)天氣預報】在Lab4項目中,編寫一個天氣預報的Java使用程序,天氣可能出現不同的狀態,要求用接口封裝天氣的狀態,具體要求如下:(1) 編寫一個接口WeatherState,該接口有一個名字為voidshowState()的方法。(2) 編寫Weather類,該類中有

24、一個WeatherState接口聲明的變量state。另外,該類有一個show()方法,在該方法中讓接口state回調showstate()方法。(3)編寫若干個實現WeatherState接口的類,負責刻畫天氣的各種狀態。(4)編寫主類,在主類中進行天氣預報。程序運行效果如下圖。有時聒參百r丙時陰-小雨轉.K南it!【知識點】掌握面向接口的編程思想:1. 程序設計時經常會使用接口,因為接口只關心操作,不關心這些操作具體實現的細節,可以使程序的設計者把主要精力放在程序的設計上,而不拘泥于細節的實現(細節留給接口的實現者),即避免設計者把大量的時間和精力花費和具體的算法上。2. 使用接口進行程序

25、設計的核心技術之一是使用接口回調,即將實現接口的類的對象的引用放到接口變量中,那么這個接口變量就可以調用類實現的接口方法。3. 面向接口編程,是指當設計某種重要的類是,不讓該類面向具體的類,而是面向接口,即所設計類中的重要數據是接口聲明的變量,而不是具體類聲明的對象。【學生解答】(1)程序代碼:/WeatherState.javapublicinterfaceWeatherStatepublicvoidshowState();/TodayMoring.javaclassTodayMoringimplementsWeatherStatepublicvoidshowState()System.ou

26、t.println("今天白天:多云,有時陰。”);/TodayNight.javaclassTodayNightimplementsWeatherStatepublicvoidshowState()System.out.println("今天夜間:小雨轉大雨”);/TomorrowMoring.javaclassTomorrowMoringimplementsWeatherStatepublicvoidshowState()System.out.println("明天白天:小雨。”);/TomorrowNight.javaclassTomorrowNightimplementsWeatherStatepublicvoidshowState()System.out.println("明天夜間:少云,有時晴");classweatherWeatherStatestate;v

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論