版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、實驗五 接口、多態(tài)與內(nèi)部類實驗?zāi)繕?biāo):1、 理解接口、塑型、多態(tài)的概念并能熟練應(yīng)用;2、 熟練掌握接口的定義和使用;3、 深刻理解構(gòu)造方法的調(diào)用順序,理解編寫時需要注意的問題;4、 了解并學(xué)會使用內(nèi)部類實驗任務(wù):1、 繼承時的多態(tài):目測給出下面代碼的執(zhí)行輸出結(jié)果,并簡單解釋每一行輸出的原因。答:首先,該程序的主函數(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)用汽車的剎車方法。因而運(yùn)行結(jié)果如下:A new bus.Vehicle is drivenCar is drivenBus is drivenVehicle is brakedVehicle is braked2.針對下面的簡單的類圖,從面向?qū)ο蟮慕嵌龋瑢nstrument定義成接口,應(yīng)怎樣實現(xiàn)。編寫能完成如圖功能的程序,并再編寫一個簡單的應(yīng)用程序進(jìn)行多態(tài)性測試。(參考例子5-9;實驗4該題是要求用
3、抽象類來實現(xiàn),在此要求用接口實現(xiàn),還要進(jìn)行多態(tài)性測試)說明:Instrument表示樂器、Wind表示管樂器、Percussion敲擊樂器、Stringed表示弦樂器、Woodwind表示木管樂器、Brass表示銅管樂器。要求:(1)Instrument為接口,Wind為抽象類,其他為普通類。這里測試的目的是:我們知道當(dāng)一個普通類實現(xiàn)一個接口時,必須實現(xiàn)該接口的全部方法,但當(dāng)這個類是抽象類時,我們還需要實現(xiàn)該接口全部方法嗎?如果不需要實現(xiàn)?那么是否直接不理這個方法就一,還是要將這個方法在自己類內(nèi)部再標(biāo)記一次為抽象方法。(聽起來有點暈,測試很簡單的,有時百讀不如一試)(2)請編寫測試代碼,對實現(xiàn)
4、Instrument接口的各個類進(jìn)行多態(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í)行結(jié)果如下圖所示:該程序的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)可以只顯示相應(yīng)的提示信息就可以,如同書本例子一樣);(6)在類Man和Woman中實現(xiàn)無參構(gòu)造方法和有參構(gòu)造方法兩種不同的構(gòu)造方法,有參構(gòu)造方法輸入自己姓名,自己年齡,在構(gòu)造方法中如果年齡超出MaxAge則輸出出錯信息并修改成默認(rèn)年齡。(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章課后習(xí)題10的基礎(chǔ)上(也是實驗04的實驗題),聲明測試類完成
19、對多態(tài)性的測試,具體要求請參見課本171頁第5章課后習(xí)題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("學(xué)生名字:"+studenti.getname()
21、+"t評測成績:"+new DecimalFormat("0.00").format(studenti.testScore();其運(yùn)行結(jié)果如下:該程序的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(); 其運(yùn)行結(jié)果如下圖所示:其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í)行結(jié)果圖下圖所示:該程序的UML圖截圖如下:6、(選做)匿名內(nèi)部類:內(nèi)部類可以聲明在方法內(nèi)部,甚至以匿名的形式聲明在new關(guān)鍵字后,試著填充下面的代碼,實現(xiàn)匿名的內(nèi)部類。填充后代碼如下:package zi;import java.u
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度生態(tài)園區(qū)沉降監(jiān)測與可持續(xù)發(fā)展合同范本4篇
- 2025年度瓷磚品牌形象設(shè)計與廣告投放合同3篇
- 2024石料運(yùn)輸合同違約責(zé)任范本3篇
- 2025年度政府機(jī)構(gòu)公務(wù)出差協(xié)議書模板4篇
- 2025年度智慧家居SAAS解決方案銷售服務(wù)合同3篇
- 2024版?zhèn)€人之間借款合同書
- 2025年度幼兒園廚房設(shè)備租賃及運(yùn)營管理合同4篇
- 2024門窗行業(yè)綠色認(rèn)證與環(huán)保評估合同3篇
- 2025年度智能設(shè)備品牌代理授權(quán)合同協(xié)議4篇
- 2025年度智能交通系統(tǒng)出資股東協(xié)議范本4篇
- 啤酒廠糖化車間熱量衡算
- 英文標(biāo)點符號用法(句號分號冒號問號感嘆號)(課堂)課件
- 22部能夠療傷的身心靈療愈電影
- 領(lǐng)導(dǎo)干部有效授權(quán)的技巧與藝術(shù)課件
- DB37-T 1915-2020 安全生產(chǎn)培訓(xùn)質(zhì)量控制規(guī)范-(高清版)
- 陜西省商洛市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)
- 實習(xí)生請假條
- 光伏電站繼電保護(hù)運(yùn)行規(guī)程
- 廚房的管理流程與制度及廚房崗位工作流程
- 鐵路危險源辨識
- 和利時DCS邏輯說明【出圖】
評論
0/150
提交評論