Java程序設(shè)計-多態(tài)與接口_第1頁
Java程序設(shè)計-多態(tài)與接口_第2頁
Java程序設(shè)計-多態(tài)與接口_第3頁
Java程序設(shè)計-多態(tài)與接口_第4頁
Java程序設(shè)計-多態(tài)與接口_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java 程序設(shè)計實驗四:繼承、多態(tài)與接口1. 提交期限和方法期限:第 12 周周五( 2015-11-27) 23:59 pm方法: 由學習委員收集所有學生的實驗報告, 以電子檔的形式提交給任課教師 (發(fā)郵箱:9867941 )。2. 實驗?zāi)康募耙笳莆?Java 的基本數(shù)據(jù)類型、運算符、表達式和語句。運行環(huán)境: JDK1.7開發(fā)環(huán)境: Eclipse3. 實驗內(nèi)容及題目3.1 子類的繼承與方法的重寫【題 1 中國人與美國人】在 Eclipse 中創(chuàng)建名為 Lab4 的新項目,編寫程序模擬中國人、 美國人、北京人。除主類外,程序中有4 個類: People、 ChinaPeople、 Ame

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

3、)、 public void averageHeight( )和 public void averageWeight( ) 方法。( 3 ) AmericanPeople 類是 People 的子類,新增 public void americanBoxing( ) 方法。要求 AmericanPeople 重寫父類的 public void speakHello( ) 、public void averageHeight( ) 和 public void averageWeight( ) 方法。Java 程序代碼。( 4 ) BeijingPeople 類是 ChinaPeople 的子類,新

4、增 public void beijingOpera( ) 方法。要求 BeijingPeople 重寫父類的 public void speakHello( ) 、 public void averageHeight( ) 和 public void averageWeight( ) 方法。運行效果如下圖。按下列代碼模板要求,將【代碼】部分替換為部分代碼已給出:/People.java public class Peopleprotected double weight, height;public void speakHello()System.out.println("yaya

5、yaya");public void averageHeight()height = 173;System.out.println("average height:" + height);public void averageWeight()weight = 70;System.out.println("average weight:" + weight);/ChinaPeople.javapublic class ChinaPeople extends People public void speakHello()System.out.pri

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

7、vapublic class AmericanPeople 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:

8、" + weight + " kg");public void americanBoxing()System.out.println(" 直拳、勾拳、組合拳 ");/BeijingPeople.javapublic class BeijingPeople extends ChinaPeople/重寫 public void averageHeight() 方法,輸出 " 北京人的平均身高 :172.5 厘米/【代碼 4】/重寫 public void averageWeight() 方法,輸出 " 北京人的平均體重 :70

9、公斤 "/【代碼 5】public void beijingOpera()System.out.println(" 花臉、青衣、花旦和老生 ");/Example.javapublic class Examplepublic static void main(String args)ChinaPeople chinaPeople = new ChinaPeople();AmericanPeople americanPeople = new AmericanPeople(); BeijingPeople beijingPeople = new BeijingPeop

10、le(); chinaPeople.speakHello(); americanPeople.speakHello();beijingPeople.speakHello();chinaPeople.averageHeight();americanPeople.averageHeight(); beijingPeople.averageHeight(); chinaPeople.averageWeight(); americanPeople.averageWeight(); beijingPeople.averageWeight(); chinaPeople.chinaGongfu(); ame

11、ricanPeople.americanBoxing(); beijingPeople.beijingOpera(); beijingPeople.chinaGongfu();【本題知識點】1. 子類的繼承性;2. 子類對象的創(chuàng)建過程;3. 方法的繼承與重寫?!緦嶒炛笇А?. 如果子類可以繼承父類的方法,子類就有權(quán)利重寫這個方法,子類通過重寫父類的 方法可以改變方法的具體行為。2. 方法重寫時一定要保證方法的名字、類型、參數(shù)個數(shù)和類型同父類的某個方法完全 相同,只有這樣,子類繼承的這個方法才被隱藏。3. 子類在重寫方法時,不可以將實例方法更改成類方法,也不可以將類方法更改為實 例方法,即如果重

12、寫的方法是 static 方法, static 關(guān)鍵字必須要保留;如果重寫的方 法是實例方法,重寫時不可以用 static 修飾該方法。【學生解答】(1)程序代碼:【代碼 1】 public void averageWeight()weight = 65;System. out .println(" 中國人平均體重 :" + weight+" 公斤 ");【代碼 2】 publicvoid speakHello()System. out .println("How do you do");【代碼 3】 publicvoid avera

13、geHeight()height = 176;System. out .println("American's average height:"+height+"cm");【代碼 4】 publicvoid averageHeight()height = 172.5;System. out .println(" 北京人平均身高 :" + height + " 厘米 ");【代碼 5】 publicvoid averageWeight()weight = 70;System. out .println(&qu

14、ot; 北京人平均體重 :" + weight+" 公斤 ");(2)運行結(jié)果截圖:3.2 成員變量隱藏與 super 關(guān)鍵字【題 2 銀行與利息】在 Lab4 項目中,編寫程序。驗證教材第 5章 81 頁的【例 5-7】。 假設(shè)銀行 Bank 已經(jīng)有了按整年 year 計算利息的一般方法, 其中 year 只能取正整數(shù)。 如按整年計算的方法:Double compuerInterest() interest = year * 0.35 * savedMoney; return interest; 建設(shè)銀行的天利息計算公式為: dayInterst = 天數(shù) *

15、0.0001 * 存款數(shù) 大連銀行的天利息計算公式為: dayInterst = 天數(shù) * 0.00012 * 存款數(shù)參照例子中的建設(shè)銀行或大連銀行,再編寫一個商業(yè)銀行,讓程序輸出 8000 元存 在商業(yè)銀行 8 年零 236 天的利息。【知識點】1. 成員變量隱藏和方法重寫;2. super 關(guān)鍵字?!緦嶒炛笇А?. 當 super 調(diào)用被隱藏的方法時,該方法中出現(xiàn)的成員變量是被子類隱藏的成員變量 或繼承的成員變量。2. 子類不繼承父類的構(gòu)造方法,因此,子類在其構(gòu)造方法中需使用 super 來調(diào)用父類 的構(gòu)造方法,而且 super 必須是子類構(gòu)造方法中的頭一條語句,即如果在在子類的 構(gòu)造方法

16、中,沒有明顯地寫出 super 關(guān)鍵字來調(diào)用父類的某個構(gòu)造方法,那么默認 有“ super( );”。3. 類中定義多個構(gòu)造方法時,建議包括一個不帶參數(shù)的構(gòu)造方法,以便子類可以省略“ super( );”?!緦W生解答】( 1)商業(yè)銀行的程序代碼: class Bankint savedMoney ;int year ; double interest ;public double computerInterest() interest = year *0.035* savedMoney ; return interest ; class BusinessBank extends Bankdou

17、ble year ;public double computerInterest() super . year = ( int ) year ; double remainNumber = year - ( int )year ; int day = ( int )( remainNumber *1000);interest = super .computerInterest()+ day *0.0001* savedMoney System. out .printf( "%d元存在商業(yè)銀行 %d年零 %d天的利息: %.2f 元 n" , savedMoney , sup

18、er . year , day , interest );return interest ; public class Example5_2 public static void main(String args )BusinessBank bank1 = new BusinessBank();bank1 . savedMoney = 8000;bank1 . year = 5.236; double interest1 = bank1 .computerInterest();(2)商業(yè)銀行的運行結(jié)果截圖:3.3 接口【題 3 歌手大賽與學生體重評估】在 Lab4 項目中,編寫程序,要求模擬歌

19、手大賽計算 選手成績和評估班級學生體重。 歌手大賽計算選手成績的方法是去掉一個最高分和一個 最低分后再計算平均分,而學校評估一個班級的學生的體重時,是計算全班同學的平均 體重。 SongGame 類和 School 類都實現(xiàn)了 ComputerAverage 接口,但實現(xiàn)方式不同。 ComputerAverage 類和 Estimator 主類的部分代碼已給出(如下) ,按下列代碼模板要求, 將【代碼】部分替換為 Java程序代碼,并寫出 SongGame 類和 School 類。/ComputerAverage.javapublic interface ComputerAverage/ 接口

20、public double average(double x);/Estimator.javapublic 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;ComputerAverage computer; computer = new SongGame();/computer 調(diào)用 average(double

21、 x)方法,將數(shù)組 a 傳遞給參數(shù) x /【代碼 1】System.out.printf("%n");System.out.printf(" 歌手最后得分: %5.3fn", result);computer = new School();/computer 調(diào)用 average(double x) 方法,將數(shù)組 b 傳遞給參數(shù) x /【代碼 2】System.out.printf(" 學生平均體重: %5.2f kg", result);運行效果如下圖。【知識點】1. 接口體中只有常量的聲明(沒有變量)和抽象方法聲明。而且接口體中所

22、有的常量 的訪問權(quán)限一定都是 public (允許省略 public 、 final 修飾符)、所有的抽象方法的訪 問權(quán)限一定都是 public (允許省略 public 、 abstract 修飾符)。2. 類實現(xiàn)接口,以便綁定接口中的方法。一個類可以實現(xiàn)多個接口,類通過使用關(guān)鍵 字 implements 聲明自己實現(xiàn)一個或多個接口。如果一個非抽象類實現(xiàn)了某個接口, 那么這個類必須重寫的所有方法。【實驗指導】1. 可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中,那么該 接口變量就可以調(diào)用被類實現(xiàn)的接口方法。2. 接口產(chǎn)生的多態(tài)就是指不同類在實現(xiàn)同一個接口時可能具有不同的實現(xiàn)

23、方式?!緦W生解答】(1)程序代碼:【代碼 1】 double result = computer.average(a);【代碼 2】 result = computer.average(b);/ SongGame.javaclass SongGame implements ComputerAverage public double average( 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 ( x i >

24、= max) max = x i ; sum+=x i ;sum = sum - min - max;sum = ( double )( sum/( x. length -2); return sum;/School.javaclass School implements ComputerAveragepublic double average( double x) double sum = 0;for (int i = 0; i <x. length ; i +) sum+= x i ;double aver = ( double )( sum/ x. length ); return

25、 aver ;(2)運行結(jié)果截圖:【思考題(選做) 】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。另外,該類有 一個 s

26、how( )方法,在該方法中讓接口 state回調(diào) showstate( )方法。( 3)編寫若干個實現(xiàn) WeatherState 接口的類,負責刻畫天氣的各種狀態(tài)。 (4)編寫主類,在主類中進行天氣預(yù)報。程序運行效果如下圖。【知識點】掌握面向接口的編程思想:1. 程序設(shè)計時經(jīng)常會使用接口,因為接口只關(guān)心操作,不關(guān)心這些操作具體實現(xiàn)的細 節(jié),可以使程序的設(shè)計者把主要精力放在程序的設(shè)計上, 而不拘泥于細節(jié)的實現(xiàn) (細 節(jié)留給接口的實現(xiàn)者) ,即避免設(shè)計者把大量的時間和精力花費與具體的算法上。2. 使用接口進行程序設(shè)計的核心技術(shù)之一是使用接口回調(diào),即將實現(xiàn)接口的類的對象 的引用放到接口變量中,那么

27、這個接口變量就可以調(diào)用類實現(xiàn)的接口方法。3. 面向接口編程,是指當設(shè)計某種重要的類是,不讓該類面向具體的類,而是面向接 口,即所設(shè)計類中的重要數(shù)據(jù)是接口聲明的變量,而不是具體類聲明的對象?!緦W生解答】(1)程序代碼:/WeatherState.javapublic interface WeatherState public void showState();/TodayMoring.java class TodayMoring public void System.implements WeatherStateshowState()out .println(" 今天白天:多云,有時陰

28、" );/TodayNight.java class TodayNightpublic void System.implements showState()WeatherStateout .println(" 今天夜間:小雨轉(zhuǎn)大雨" );/ TomorrowMoring.javaclass TomorrowMoring implements WeatherState public void showState()System. out .println(" 明天白天:小雨。 ");/ TomorrowNight.javaclass Tomorrow

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論