14401048方萍3班實驗4_第1頁
14401048方萍3班實驗4_第2頁
14401048方萍3班實驗4_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Java程序設(shè)計實驗四:繼承、多態(tài)與接口1. 提交期限和方法期限:第 12 周周五2015-11-2723: 59 pm方法:由學(xué)習(xí)委員收集所有學(xué)生的實驗報告,以電子檔的形式提交給任課教師發(fā):9867941.。2. 實驗?zāi)康呐c要求掌握J(rèn)ava的根本數(shù)據(jù)類型、運算符、表達式和語句。開發(fā)環(huán)境:Eclipse3. 實驗內(nèi)容與題目3.1子類的繼承與方法的重寫【題1中國人與美國人】在 Eclipse中創(chuàng)建名為Lab4的新項目,編寫程序模擬中國人、 美國人、人。除主類外,程序中有4個類:People、ChinaPeople、AmericanPeople和BeijingPeople類。要求如下:1 Peop

2、le 類有權(quán)限是 protected 的 double 型成員變量:height 和 weight,以與 public void speakHello( )、public void averageHeight()禾口 public void averageWeight()方法。2ChinaPeople 類是 People類的子類,新增了 public void chinaGongfu()方法。要求 ChinaPeople 重寫父類的 public void speakHello ()、public void averageHeight()禾口 public void averageWeight

3、()方法。3AmericanPeople 類是 People 的子類,新增 public void americanBoxing() 方法。要求 AmericanPeople 重寫父類的 public void speakHello( ) > public void averageHeight()禾口 public void averageWeight()方法。4BeijingPeople 類是 ChinaPeople 的子類,新增 public void beijingOpera()方法。要求 BeijingPeople 重寫父類的 public void speakHello( )、

4、public void averageHeight()禾口 public void averageWeight()方法。Java程序代碼。運行效果如如下圖。按如下代碼模板要求,將【代碼】局部替換為CsktopLaiM:_l>J.ava ExaiwpJLjBHum du puu tits 暢 一 , *國平対身昏訟曲厚米Anr ricrtiii1 n瞽歳皿” lwr iyliL ;17ti R cn 北平押殳高:172J厘米 巾由人華舟呑董勵*昭-斤Anrrirrtn9 swrR kg彳遠人的平均低董t海冬斤 欝麗如詡弓局部代碼已給出:public class Peopleprotecte

5、d double weight, height;public void speakHello()System.out.println("yayayaya");public void averageHeight()height = 173;System.out.println("average height:" + height);public void averageWeight()weight = 70;System.out.println("average weight:" + weight);public class China

6、People extends Peoplepublic void speakHello()(” 您好");public void averageHeight()height = 168.78;(” 中國人平均身高:"+ height + "厘米");/重寫public void averageWeight()方法,輸出:"中國人平均體重:65公斤"/【代碼1】public void chinaGongfu()System.out.println("坐如鐘,站如松,睡如弓 ");public class Americ

7、anPeople extends People/重寫 public void speakHello()方法,輸出"How do you do"/【代碼2】/重寫 public void averageHeight()方法,輸出 "American's average height:176 cm"/【代碼3】public void averageWeight()weight = 75;System.out.println("American's average weight:" + weight + " kg&

8、quot;);public void americanBoxing()(” 直拳、勾拳、組合拳");public class BeijingPeople extends ChinaPeople/重寫public void averageHeight()方法,輸出"人的平均身高:172.5厘米/【代碼4】/重寫public void averageWeight()方法,輸出"人的平均體重:70公斤"/【代碼5】public void beijingOpera()(”花臉、青衣、花旦和老生 ”);public class Examplepublic stat

9、ic void main(String args)ChinaPeople chinaPeople = new ChinaPeople();AmericanPeople americanPeople = new AmericanPeople();BeijingPeople beijingPeople = new BeijingPeople(); chinaPeople.speakHello();americanPeople.speakHello();beijingPeople.speakHello(); chinaPeople.averageHeight();americanPeople.ave

10、rageHeight(); beijingPeople.averageHeight();chinaPeople.averageWeight(); americanPeople.averageWeight();beijingPeople.averageWeight(); chinaPeople.chinaGongfu();americanPeople.americanBoxing();beijingPeople.beijingOpera();beijingPeople.chinaGongfu();【此題知識點】1. 子類的繼承性;2. 子類對象的創(chuàng)建過程;3. 方法的繼承與重寫。 【實驗指導(dǎo)】1

11、. 如果子類可以繼承父類的方法,子類就有權(quán)利重寫這個方法,子類通過重寫父類的 方法可以改變方法的具體行為。2. 方法重寫時一定要保證方法的名字、類型、參數(shù)個數(shù)和類型同父類的某個方法完全 一樣,只有這樣,子類繼承的這個方法才被隱藏。3. 子類在重寫方法時,不可以將實例方法更改成類方法,也不可以將類方法更改為實例方法,即如果重寫的方法是static方法,static關(guān)鍵字必須要保存;如果重寫的方法是實例方法,重寫時不可以用static修飾該方法。【學(xué)生解答】1程序代碼:【代碼 1】publicvoid averageWeight()weight = 65;System. out .println(

12、"中國人平均體重:"+ weight+" 公斤");【代碼 2】publicvoid speakHello()System. out .println("How do you do");【代碼 3】publicvoid averageHeight()height = 176;System. out .println("American's average height:"+height +"cm");【代碼4】publicvoidheight = 172.5;System. out .p

13、rintln(" 【代碼5】publicvoidweight = 70;System. out .println(" 2運行結(jié)果截圖:averageHeight()人平均身高:"+ height + "厘米");averageWeight()人平均體重:"+ weight+" 公斤");SIC!WindowsSy5tem32kcmdrexe子do厘7S-8ra身均平 '人1C人人-錦國竺冊國doU皿臀訶斤£ 2 -975 冋:1:6 e-Sr司£.u-Erc-唇 aS-勻t$l nB工

14、J- a4J弓上一弓 如若如 平,勾青, 人1t、+鐘 京如舉髓 h ?一 r if:XlLab4Mrc>l【思考題選做】People 類中 的 public void speakHello( ), public void averageHeight( ), public void averageWeight()三個方法的方法體中的語句是否可以省略?【答:】可以省略.3.2成員變量隱藏與super關(guān)鍵字【題2銀行與利息】在 Lab4項目中,編寫程序。驗證教材第5章81頁的【例5-7】。假設(shè)銀行Bank已經(jīng)有了按整年year計算利息的一般方法,其中year只能取正整數(shù)。如按整年計算的方法:

15、Double puerl nterest()in terest = year * 0.35 * savedM on ey;return in terest;建設(shè)銀行的天利息計算公式為:day In terst =天數(shù)* 0.0001 *存款數(shù)某某銀行的天利息計算公式為:daylnterst =天數(shù)* 0.00012 *存款數(shù)參照例子中的建設(shè)銀行或某某銀行,再編寫一個商業(yè)銀行,讓程序輸出8000元存在商業(yè)銀行8年零236天的利息。【知識點】1. 成員變量隱藏和方法重寫;2. super關(guān)鍵字。【實驗指導(dǎo)】1. 當(dāng)super調(diào)用被隱藏的方法時,該方法中出現(xiàn)的成員變量是被子類隱藏的成員變量 或繼承的

16、成員變量。2. 子類不繼承父類的構(gòu)造方法,因此,子類在其構(gòu)造方法中需使用super來調(diào)用父類的構(gòu)造方法,而且super必須是子類構(gòu)造方法中的頭一條語句,即如果在在子類的構(gòu)造方法中,沒有明顯地寫出super關(guān)鍵字來調(diào)用父類的某個構(gòu)造方法,那么默認(rèn)有"super();"。3. 類中定義多個構(gòu)造方法時,建議包括一個不帶參數(shù)的構(gòu)造方法,以便子類可以省略“ super(); ”?!緦W(xué)生解答】1商業(yè)銀行的程序代碼:class Bankint savedMoney ;int year ;double interest;publicdouble puter In terest()inter

17、est= year *0.035* savedMoney ;return in terest ;class Bus in essBa nkexte nds Bankdouble year ;publicdouble puter In terest()super . year = ( int ) year ;double remainNumber = year - ( int ) year ;int day = ( int )( remainNumber *1000);interest= super .puterInterest()+day *0.0001* savedMoney ;System

18、. out .printf("%d元存在商業(yè)銀行 d年零d天的利息:.2f元n" , savedMoney , super . year , day , interest);return in terest;publicclass Example5_2 publicstaticvoidmain(String args )Bus in essBa nkbank1 = new Bus in essBa nk();bank1 . savedMoney = 8000;bank1 . year = 5.236;double interest1= bank1 .puterInteres

19、t();2商業(yè)銀行的運行結(jié)果截圖:3.3 接口【題3歌手大賽與學(xué)生體重評估】在 Lab4項目中,編寫程序,要求模擬歌手大賽計算 選手成績和評估班級學(xué)生體重。歌手大賽計算選手成績的方法是去掉一個最高分和一個最低分后再計算平均分,而學(xué)校評估一個班級的學(xué)生的體重時,是計算全班同學(xué)的平均 體重。SongGame類和 School類都實現(xiàn)了puterAverage接口,但實現(xiàn)方式不同。puterAverage類和Estimator主類的局部代碼已給出如下,按如下代碼模板要求,將【代碼】局部替換為Java程序代碼,并寫出SongGame類和School類。public interface puterAve

20、rage 接口public double average(double x);public class Estimator / 主類public static void main(String args)double a = 9.89, 9.88, 9.99, 9.12, 9.69, 9.76, 8.97;double b = 56, 55.5, 65, 50, 51.5, 53.6, 70, 49, 66, 62, 46;puterAverage puter;puter = new SongGame();/puter調(diào)用average(double x)方法,將數(shù)組 a傳遞給參數(shù) x/【代碼

21、1】System.out.printf("%n");System.out.printf("歌手最后得分:%5.3fn", result);puter = new School();/puter調(diào)用average(double x)方法,將數(shù)組 b傳遞給參數(shù) x /【代碼2】(” 學(xué)生平均體重:%5.2f kg", result);運行效果如如下圖。;:xzhsRgXDR><:ktn|iLh4_1 >jaurnr Fst inarjamaC ; XllSRrsXr-hriilNyJrtSkcn(iLrih4 馬JtiUH Et

22、ili««tn:r【知識點】1. 接口體中只有常量的聲明沒有變量和抽象方法聲明。而且接口體中所有的常量 的訪冋權(quán)限一疋都是 public允許省略public、final修飾符、所有的抽象方法的訪 冋權(quán)限一疋都是 public允許省略 public、abstract修飾符。2. 類實現(xiàn)接口,以便綁定接口中的方法。一個類可以實現(xiàn)多個接口,類通過使用關(guān)鍵 字implements聲明自己實現(xiàn)一個或多個接口。如果一個非抽象類實現(xiàn)了某個接口, 那么這個類必須重寫的所有方法。【實驗指導(dǎo)】1. 可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中,那么該 接口變量就可以調(diào)用被類

23、實現(xiàn)的接口方法。2. 接口產(chǎn)生的多態(tài)就是指不冋類在實現(xiàn)冋一個接口時可能具有不冋的實現(xiàn)方式。【學(xué)生解答】1程序代碼:【代碼 1 】double result = puter.average(a);【代碼 2】result = puter.average(b);class SongGame implementsputerAveragepublicdoubleaverage( double x )double min =10, max=-20, sum=0;for (int i = 0; i <x. length ; i +)if (x i <= min )min = x i ;if (

24、x i >= max)max = x i ;sum+=x i ;sum = sum - min - max;sum = ( double )( sum/( x. length -2); return sum;class Schoolimpleme nts puterAveragepublicdoubleaverage( double x)double sum = 0;for (int i = 0; i <x. length ; i +) sum+= x i ;double aver = ( double )( sum/ x. length ); return aver ;2運行結(jié)果

25、截圖:S3C:WindowsSy5te*n35cmd.exeIIstinator1 : Lab4Xst*c >【思考題選做】School類如果不重寫 public double average(double x)方法,程序編譯時提示怎樣的錯誤?3.4接口回調(diào)選做【題4選做天氣預(yù)報】在Lab4項目中,編寫一個天氣預(yù)報的Java應(yīng)用程序,天氣可能出現(xiàn)不同的狀態(tài),要求用接口封裝天氣的狀態(tài),具體要求如下:1編寫一個接口 WeatherState,該接口有一個名字為 void showState()的方法。2編寫 Weather類,該類中有一個 WeatherState接口聲明的變量 state。

26、另外,該類有一個show()方法,在該方法中讓接口state回調(diào)showstate()方法。3編寫假如干個實現(xiàn) WeatherState接口的類,負(fù)責(zé)刻畫天氣的各種狀態(tài)。4編寫主類,在主類中進展天氣預(yù)報。程序運行效果如如下圖。天舉W 口咅K >分明也LT _| A 一【知識點】掌握面向接口的編程思想:1. 程序設(shè)計時經(jīng)常會使用接口,因為接口只關(guān)心操作,不關(guān)心這些操作具體實現(xiàn)的細(xì)節(jié),可以使程序的設(shè)計者把主要精力放在程序的設(shè)計上,而不拘泥于細(xì)節(jié)的實現(xiàn)細(xì)節(jié)留給接口的實現(xiàn)者,即防止設(shè)計者把大量的時間和精力花費與具體的算法上。2. 使用接口進展程序設(shè)計的核心技術(shù)之一是使用接口回調(diào),即將實現(xiàn)接口的類

27、的對象 的引用放到接口變量中,那么這個接口變量就可以調(diào)用類實現(xiàn)的接口方法。3. 面向接口編程,是指當(dāng)設(shè)計某種重要的類是,不讓該類面向具體的類,而是面向接 口,即所設(shè)計類中的重要數(shù)據(jù)是接口聲明的變量,而不是具體類聲明的對象。【學(xué)生解答】1程序代碼:public in terface Weath publicvoid showState(); class TodayMori ngimpleme nts WeatherStatepublicvoid showState()System. out .println("今天白天:多云,有時陰?!?;class TodayNightimpleme ntsWeatherStatepublicvoid showState()System. out .println("今天夜間:小雨轉(zhuǎn)大雨");/ TomorrowMori ng.javaclass TomorrowMori ngimpleme ntsWeatherStatepublicvoid showState()System. out .println( "明天白天:小雨。 ”);/ Tomorrowclass TomorrowNight impleme nts WeatherState publicvoid sh

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論