java 實驗5 接口多態(tài)實驗報告_第1頁
java 實驗5 接口多態(tài)實驗報告_第2頁
java 實驗5 接口多態(tài)實驗報告_第3頁
java 實驗5 接口多態(tài)實驗報告_第4頁
java 實驗5 接口多態(tài)實驗報告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實驗五 接口、多態(tài)與內(nèi)部類實驗目標:1、 理解接口、塑型、多態(tài)的概念并能熟練應用;2、 熟練掌握接口的定義和使用;3、 深刻理解構造方法的調(diào)用順序,理解編寫時需要注意的問題;4、 了解并學會使用內(nèi)部類實驗任務:1、 繼承時的多態(tài):目測給出下面代碼的執(zhí)行輸出結果,并簡單解釋每一行輸出的原因。答:首先,該程序的主函數(shù)是Vehicle v=new Vehicle();即先聲明并實例化一個汽車對象,而v.test();則是調(diào)用汽車的測試方法;而test方法里,Vehicle vc=new Car();是將上面的汽車指向了一個具體的小汽車對象;Bus vb=new Bus();將公共汽車指向了一個具體的

2、公共汽車對象;drive();調(diào)用汽車的駕駛方法;vc.drive();調(diào)用小汽車的駕駛方法;vb.drive();調(diào)用公共汽車的駕駛方法;而vc.brake();vb.brake();則是直接調(diào)用汽車的剎車方法。因而運行結果如下:A new bus.Vehicle is drivenCar is drivenBus is drivenVehicle is brakedVehicle is braked2.針對下面的簡單的類圖,從面向?qū)ο蟮慕嵌?,將Instrument定義成接口,應怎樣實現(xiàn)。編寫能完成如圖功能的程序,并再編寫一個簡單的應用程序進行多態(tài)性測試。(參考例子5-9;實驗4該題是要求用

3、抽象類來實現(xiàn),在此要求用接口實現(xiàn),還要進行多態(tài)性測試)說明:Instrument表示樂器、Wind表示管樂器、Percussion敲擊樂器、Stringed表示弦樂器、Woodwind表示木管樂器、Brass表示銅管樂器。要求:(1)Instrument為接口,Wind為抽象類,其他為普通類。這里測試的目的是:我們知道當一個普通類實現(xiàn)一個接口時,必須實現(xiàn)該接口的全部方法,但當這個類是抽象類時,我們還需要實現(xiàn)該接口全部方法嗎?如果不需要實現(xiàn)?那么是否直接不理這個方法就一,還是要將這個方法在自己類內(nèi)部再標記一次為抽象方法。(聽起來有點暈,測試很簡單的,有時百讀不如一試)(2)請編寫測試代碼,對實現(xiàn)

4、Instrument接口的各個類進行多態(tài)測試,具體可參考課本例子。所謂多態(tài)測試就是向上自動塑型,以及向下動態(tài)綁定,而動態(tài)綁定的基本規(guī)則是實例方法“由下往上”尋找綁定,類方法和類屬性成員“由上往下”尋找綁定。(對其概念不清晰的請留意課本知識與課堂講解)該題代碼如下:package zi;interface Instrument void play(); String what(); void adjust();abstract class Wind implements Instrument public void play() System.out.println("Wind.pla

5、y()"); public abstract String what() ; public void adjust() System.out.println("Wind.adjust"); class Percussion implements Instrument public void play() System.out.println("Percussion.play()"); public String what() return "Percussion.play()" public void adjust() Sy

6、stem.out.println("Percussion.adjust()"); class Stringed implements Instrument public void play() System.out.println("Stringed.play()"); public String what() return "Stringed.play()" public void adjust() System.out.println("Stringed.adjust()"); class Brass exte

7、nds Wind public void play() System.out.println("Brass.play()"); public String what() return "Brass.play()" public void adjust() System.out.println("Brass.adjust()"); class Woodwind extends Wind public void play() System.out.println("Woodwind.play()"); public S

8、tring what() return "Woodwind.play()" public void adjust() System.out.println("Woodwind.adjust()"); public class Ex5_2 public static void main(String args) Instrument i2,i3,i4,i5; / i1 = new Wind(); /i1.play(); i2 = new Percussion(); i2.play(); i3 = new Stringed(); i3.play(); i4

9、= new Brass(); i4.play(); i5 = new Woodwind(); i5.play(); 其執(zhí)行結果如下圖所示:該程序的uml圖截圖如下:3編寫程序,要求如下:(1)定義Biology(生物)、Animal(動物)和Mankind(人)3個接口;該題代碼截圖如下:以下為Biology(生物)的接口:以下為Animal(動物)的接口:以下為Mankind(人)的接口:(2)接口Biology聲明breath()抽象方法;截圖如下:(3)接口Animal繼承Biology并聲明move()和eat()抽象方法;其代碼如下:interface Animals extends

10、 Biologyvoid breathe();void eat();void move();(4)接口Mankind繼承Animal并聲明study()和think()抽象方法,增加屬性MaxAge;其代碼如下:package zi;interface Biologyvoid breath();interface Animal extends Biologyvoid move();void eat();public interface Mankind extends Animalint MaxAge=150;void studty();void think();其UML圖截圖如下:(5)定義類

11、Man和Woman實現(xiàn)接口Mankind,實現(xiàn)它們聲明的抽象方法,并增加屬性,name,sex(類屬性成員)和age;(具體實現(xiàn)可以只顯示相應的提示信息就可以,如同書本例子一樣);(6)在類Man和Woman中實現(xiàn)無參構造方法和有參構造方法兩種不同的構造方法,有參構造方法輸入自己姓名,自己年齡,在構造方法中如果年齡超出MaxAge則輸出出錯信息并修改成默認年齡。(7)編寫測試類使用接口Mankind來測試類Man和Woman的多態(tài)性。(向上塑型和向下動態(tài)綁定)以上三小問的程序如下所示:package zi;public interface Mankind extends Animalint M

12、axAge=150;void study();void think();package zi;public class Man implements Mankind protected String name;static String sex="male"protected int age;public Man()this("某男",18);public Man(String name,int age)=name;if(age<=MaxAge)&&(age>0)this.age=age;elseSystem

13、.out.println("Age Wrong,Init 18");this.age=18;Overridepublic void move() / TODO 自動生成的方法存根System.out.println("Man's move");Overridepublic void eat() / TODO 自動生成的方法存根System.out.println("Man's eat");Overridepublic void breath() / TODO 自動生成的方法存根System.out.println(&q

14、uot;Man's breath");Overridepublic void study() / TODO 自動生成的方法存根System.out.println("Man's study");Overridepublic void think() / TODO 自動生成的方法存根System.out.println("Man's think");public String toString()return(name+","+sex+","+age);package zi;publ

15、ic class Woman implements Mankind protected String name;static String sex="female"protected int age;public Woman()this("某女",18);public Woman(String name,int age)=name;if(age<=MaxAge)&&(age>0)this.age=age;elseSystem.out.println("Age Wrong,Init 18")

16、;this.age=18;Overridepublic void move() / TODO 自動生成的方法存根System.out.println("Woman's move");Overridepublic void eat() / TODO 自動生成的方法存根System.out.println("Woman's eat");Overridepublic void breath() / TODO 自動生成的方法存根System.out.println("Woman's breath");Overridep

17、ublic void study() / TODO 自動生成的方法存根System.out.println("Woman's study");Overridepublic void think() / TODO 自動生成的方法存根System.out.println("Woman's think");public String toString()return(name+","+sex+","+age);package zi;public class Ex5_3 public static void

18、 main (String args) Mankind m1=new Man("張男",-2);Mankind m2=new Woman("李女",180);System.out.println(m1.toString();System.out.println(m2.toString();m1.breath();m2.breath();m1.move();m2.move();m1.study();m2.study();m1.think();m2.think();其UML圖如下圖所示:4.在第4章課后習題10的基礎上(也是實驗04的實驗題),聲明測試類完成

19、對多態(tài)性的測試,具體要求請參見課本171頁第5章課后習題8。該題的測試類的代碼如下:package zi;import java.text.*;public class Ex5_4public static void main(String args)Student student=new Student("2012001","張三",76.00f,80.00f,94.00f),new Student("2012002","李四",81.00f,85.00f,80.00f),new Student("20

20、12003","王五",91.00f,77.00f,75.00f),new StudentXW("2012004","林六",98.00f,87.00f,36.00f,"英語代表"),new StudentBZ("2012005","趙七",94.00f,85.00f,87.00f,"班長");for(int i=0;i<5;i+)System.out.println("學生名字:"+studenti.getname()

21、+"t評測成績:"+new DecimalFormat("0.00").format(studenti.testScore();其運行結果如下:該程序的UML圖截圖如下:5、內(nèi)部類:定義一個類Outer,類中擁有私有成員變量a和成員方法output( )。在這個類中定義一個內(nèi)部類Inner,內(nèi)部類中定義一個方法out( )修改外部類的成員變量a的值,并調(diào)用外部類的私有方法output( )。最后在外部類的公有靜態(tài)main方法中調(diào)用內(nèi)部類的方法。要求:測試使用兩種方式來調(diào)用內(nèi)部類方法,第一種,在外部類方法里面創(chuàng)建內(nèi)部類對象,在main方法里面通過調(diào)用外部類

22、的方法來間接調(diào)用內(nèi)部類方法;該題代碼如下:package zi;public class Outer1private String a;public void output()System.out.println(a);class Innerpublic Inner()public void out(String b)a=b;output();public void run()Inner i1=new Inner();i1.out("a of Outer1 changed by Inner");public static void main(String args)Oute

23、r1 o1=new Outer1();o1.run(); 其運行結果如下圖所示:其UML圖截圖如下:第二種,在main方法里面直接創(chuàng)建內(nèi)部類對象,直接調(diào)用內(nèi)部類方法該題代碼如下:package zi;public class Outer2private String a;public void output()System.out.println(a);class Innerpublic Inner()public void out(String b)a=b;output();public void run()Inner i1=new Inner();i1.out("abcdefg"); public static void main(String args) Outer2 o2=new Outer2(); Outer2.Inner ii1=o2.new Inner();ii1.out("a of Outer2 by Inner"); 其執(zhí)行結果圖下圖所示:該程序的UML圖截圖如下:6、(選做)匿名內(nèi)部類:內(nèi)部類可以聲明在方法內(nèi)部,甚至以匿名的形式聲明在new關鍵字后,試著填充下面的代碼,實現(xiàn)匿名的內(nèi)部類。填充后代碼如下:package zi;import java.u

溫馨提示

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

評論

0/150

提交評論