




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)五 接口、多態(tài)與內(nèi)部類實(shí)驗(yàn)?zāi)繕?biāo):1、 理解接口、塑型、多態(tài)的概念并能熟練應(yīng)用;2、 熟練掌握接口的定義和使用;3、 深刻理解構(gòu)造方法的調(diào)用順序,理解編寫時(shí)需要注意的問題;4、 了解并學(xué)會(huì)使用內(nèi)部類實(shí)驗(yàn)任務(wù):1、 繼承時(shí)的多態(tài):目測(cè)給出下面代碼的執(zhí)行輸出結(jié)果,并簡(jiǎn)單解釋每一行輸出的原因。答:首先,該程序的主函數(shù)是Vehicle v=new Vehicle();即先聲明并實(shí)例化一個(gè)汽車對(duì)象,而v.test();則是調(diào)用汽車的測(cè)試方法;而test方法里,Vehicle vc=new Car();是將上面的汽車指向了一個(gè)具體的小汽車對(duì)象;Bus vb=new Bus();將公共汽車指向了一個(gè)具體的
2、公共汽車對(duì)象;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.針對(duì)下面的簡(jiǎn)單的類圖,從面向?qū)ο蟮慕嵌?,將Instrument定義成接口,應(yīng)怎樣實(shí)現(xiàn)。編寫能完成如圖功能的程序,并再編寫一個(gè)簡(jiǎn)單的應(yīng)用程序進(jìn)行多態(tài)性測(cè)試。(參考例子5-9;實(shí)驗(yàn)4該題是要求用
3、抽象類來實(shí)現(xiàn),在此要求用接口實(shí)現(xiàn),還要進(jìn)行多態(tài)性測(cè)試)說明:Instrument表示樂器、Wind表示管樂器、Percussion敲擊樂器、Stringed表示弦樂器、Woodwind表示木管樂器、Brass表示銅管樂器。要求:(1)Instrument為接口,Wind為抽象類,其他為普通類。這里測(cè)試的目的是:我們知道當(dāng)一個(gè)普通類實(shí)現(xiàn)一個(gè)接口時(shí),必須實(shí)現(xiàn)該接口的全部方法,但當(dāng)這個(gè)類是抽象類時(shí),我們還需要實(shí)現(xiàn)該接口全部方法嗎?如果不需要實(shí)現(xiàn)?那么是否直接不理這個(gè)方法就一,還是要將這個(gè)方法在自己類內(nèi)部再標(biāo)記一次為抽象方法。(聽起來有點(diǎn)暈,測(cè)試很簡(jiǎn)單的,有時(shí)百讀不如一試)(2)請(qǐng)編寫測(cè)試代碼,對(duì)實(shí)現(xiàn)
4、Instrument接口的各個(gè)類進(jìn)行多態(tài)測(cè)試,具體可參考課本例子。所謂多態(tài)測(cè)試就是向上自動(dòng)塑型,以及向下動(dòng)態(tài)綁定,而動(dòng)態(tài)綁定的基本規(guī)則是實(shí)例方法“由下往上”尋找綁定,類方法和類屬性成員“由上往下”尋找綁定。(對(duì)其概念不清晰的請(qǐng)留意課本知識(shí)與課堂講解)該題代碼如下: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(動(dòng)物)和Mankind(人)3個(gè)接口;該題代碼截圖如下:以下為Biology(生物)的接口:以下為Animal(動(dòng)物)的接口:以下為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實(shí)現(xiàn)接口Mankind,實(shí)現(xiàn)它們聲明的抽象方法,并增加屬性,name,sex(類屬性成員)和age;(具體實(shí)現(xiàn)可以只顯示相應(yīng)的提示信息就可以,如同書本例子一樣);(6)在類Man和Woman中實(shí)現(xiàn)無參構(gòu)造方法和有參構(gòu)造方法兩種不同的構(gòu)造方法,有參構(gòu)造方法輸入自己姓名,自己年齡,在構(gòu)造方法中如果年齡超出MaxAge則輸出出錯(cuò)信息并修改成默認(rèn)年齡。(7)編寫測(cè)試類使用接口Mankind來測(cè)試類Man和Woman的多態(tài)性。(向上塑型和向下動(dòng)態(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 自動(dòng)生成的方法存根System.out.println("Man's move");Overridepublic void eat() / TODO 自動(dòng)生成的方法存根System.out.println("Man's eat");Overridepublic void breath() / TODO 自動(dòng)生成的方法存根System.out.println(&q
14、uot;Man's breath");Overridepublic void study() / TODO 自動(dòng)生成的方法存根System.out.println("Man's study");Overridepublic void think() / TODO 自動(dòng)生成的方法存根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 自動(dòng)生成的方法存根System.out.println("Woman's move");Overridepublic void eat() / TODO 自動(dòng)生成的方法存根System.out.println("Woman's eat");Overridepublic void breath() / TODO 自動(dòng)生成的方法存根System.out.println("Woman's breath");Overridep
17、ublic void study() / TODO 自動(dòng)生成的方法存根System.out.println("Woman's study");Overridepublic void think() / TODO 自動(dòng)生成的方法存根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ǔ)上(也是實(shí)驗(yàn)04的實(shí)驗(yàn)題),聲明測(cè)試類完成
19、對(duì)多態(tài)性的測(cè)試,具體要求請(qǐng)參見課本171頁第5章課后習(xí)題8。該題的測(cè)試類的代碼如下: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,"班長(zhǎng)");for(int i=0;i<5;i+)System.out.println("學(xué)生名字:"+studenti.getname()
21、+"t評(píng)測(cè)成績(jī):"+new DecimalFormat("0.00").format(studenti.testScore();其運(yùn)行結(jié)果如下:該程序的UML圖截圖如下:5、內(nèi)部類:定義一個(gè)類Outer,類中擁有私有成員變量a和成員方法output( )。在這個(gè)類中定義一個(gè)內(nèi)部類Inner,內(nèi)部類中定義一個(gè)方法out( )修改外部類的成員變量a的值,并調(diào)用外部類的私有方法output( )。最后在外部類的公有靜態(tài)main方法中調(diào)用內(nèi)部類的方法。要求:測(cè)試使用兩種方式來調(diào)用內(nèi)部類方法,第一種,在外部類方法里面創(chuàng)建內(nèi)部類對(duì)象,在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)部類對(duì)象,直接調(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)鍵字后,試著填充下面的代碼,實(shí)現(xiàn)匿名的內(nèi)部類。填充后代碼如下:package zi;import java.u
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 脊柱疼痛臨床
- 2025年征信考試題庫:征信產(chǎn)品創(chuàng)新與金融科技融合案例試題
- 2025年鄉(xiāng)村醫(yī)生農(nóng)村急救技能操作考試題庫:急救技能實(shí)操模擬試題
- 2025年護(hù)士執(zhí)業(yè)資格考試康復(fù)護(hù)理學(xué)專項(xiàng)護(hù)理法律法規(guī)試題解析試卷
- 2025年統(tǒng)計(jì)學(xué)專業(yè)期末考試題庫-統(tǒng)計(jì)質(zhì)量管理經(jīng)典案例分析試題集
- PowerPoint制作-撕紙效果
- 2025年環(huán)境影響評(píng)價(jià)工程師考試真題卷實(shí)戰(zhàn)演練
- 危急重癥搶救制度
- 土層錨桿的成孔
- 膝關(guān)節(jié)置換手術(shù)護(hù)理配合
- 醫(yī)學(xué)課件:介入放射學(xué)(全套課件328張)
- 二年級(jí)下冊(cè)課文(五)16雷雨-雷雨-學(xué)習(xí)任務(wù)單
- 食品添加劑、食品污染物的本底與轉(zhuǎn)化來源
- 供應(yīng)商管理控制流程圖
- 泥石流勘察設(shè)計(jì)Word版(共44頁)
- 普通生態(tài)學(xué)15章集合種群及其模型剖析課件
- 四年級(jí)下冊(cè)健康成長(zhǎng)教案(共26頁)
- 義務(wù)教育語文課程標(biāo)準(zhǔn)(2022年版)
- 初中物理公式總結(jié)大全(最新歸納)
- GB 12268-2012 危險(xiǎn)貨物品名表(高清版)
- 人員培訓(xùn)質(zhì)量風(fēng)險(xiǎn)評(píng)估報(bào)告
評(píng)論
0/150
提交評(píng)論