版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(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)部類(lèi)實(shí)驗(yàn)?zāi)繕?biāo):1、 理解接口、塑型、多態(tài)的概念并能熟練應(yīng)用;2、 熟練掌握接口的定義和使用;3、 深刻理解構(gòu)造方法的調(diào)用順序,理解編寫(xiě)時(shí)需要注意的問(wèn)題;4、 了解并學(xué)會(huì)使用內(nèi)部類(lèi)實(shí)驗(yàn)任務(wù):1、 繼承時(shí)的多態(tài):目測(cè)給出下面代碼的執(zhí)行輸出結(jié)果,并簡(jiǎn)單解釋每一行輸出的原因。答:首先,該程序的主函數(shù)是Vehicle v=new Vehicle();即先聲明并實(shí)例化一個(gè)汽車(chē)對(duì)象,而v.test();則是調(diào)用汽車(chē)的測(cè)試方法;而test方法里,Vehicle vc=new Car();是將上面的汽車(chē)指向了一個(gè)具體的小汽車(chē)對(duì)象;Bus vb=new Bus();將公共汽車(chē)指向了一個(gè)具體的
2、公共汽車(chē)對(duì)象;drive();調(diào)用汽車(chē)的駕駛方法;vc.drive();調(diào)用小汽車(chē)的駕駛方法;vb.drive();調(diào)用公共汽車(chē)的駕駛方法;而vc.brake();vb.brake();則是直接調(diào)用汽車(chē)的剎車(chē)方法。因而運(yùn)行結(jié)果如下:A new bus.Vehicle is drivenCar is drivenBus is drivenVehicle is brakedVehicle is braked2.針對(duì)下面的簡(jiǎn)單的類(lèi)圖,從面向?qū)ο蟮慕嵌?,將Instrument定義成接口,應(yīng)怎樣實(shí)現(xiàn)。編寫(xiě)能完成如圖功能的程序,并再編寫(xiě)一個(gè)簡(jiǎn)單的應(yīng)用程序進(jìn)行多態(tài)性測(cè)試。(參考例子5-9;實(shí)驗(yàn)4該題是要求用
3、抽象類(lèi)來(lái)實(shí)現(xiàn),在此要求用接口實(shí)現(xiàn),還要進(jìn)行多態(tài)性測(cè)試)說(shuō)明:Instrument表示樂(lè)器、Wind表示管樂(lè)器、Percussion敲擊樂(lè)器、Stringed表示弦樂(lè)器、Woodwind表示木管樂(lè)器、Brass表示銅管樂(lè)器。要求:(1)Instrument為接口,Wind為抽象類(lèi),其他為普通類(lèi)。這里測(cè)試的目的是:我們知道當(dāng)一個(gè)普通類(lèi)實(shí)現(xiàn)一個(gè)接口時(shí),必須實(shí)現(xiàn)該接口的全部方法,但當(dāng)這個(gè)類(lèi)是抽象類(lèi)時(shí),我們還需要實(shí)現(xiàn)該接口全部方法嗎?如果不需要實(shí)現(xiàn)?那么是否直接不理這個(gè)方法就一,還是要將這個(gè)方法在自己類(lèi)內(nèi)部再標(biāo)記一次為抽象方法。(聽(tīng)起來(lái)有點(diǎn)暈,測(cè)試很簡(jiǎn)單的,有時(shí)百讀不如一試)(2)請(qǐng)編寫(xiě)測(cè)試代碼,對(duì)實(shí)現(xiàn)
4、Instrument接口的各個(gè)類(lèi)進(jìn)行多態(tài)測(cè)試,具體可參考課本例子。所謂多態(tài)測(cè)試就是向上自動(dòng)塑型,以及向下動(dòng)態(tài)綁定,而動(dòng)態(tài)綁定的基本規(guī)則是實(shí)例方法“由下往上”尋找綁定,類(lèi)方法和類(lèi)屬性成員“由上往下”尋找綁定。(對(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編寫(xiě)程序,要求如下:(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)定義類(lèi)
11、Man和Woman實(shí)現(xiàn)接口Mankind,實(shí)現(xiàn)它們聲明的抽象方法,并增加屬性,name,sex(類(lèi)屬性成員)和age;(具體實(shí)現(xiàn)可以只顯示相應(yīng)的提示信息就可以,如同書(shū)本例子一樣);(6)在類(lèi)Man和Woman中實(shí)現(xiàn)無(wú)參構(gòu)造方法和有參構(gòu)造方法兩種不同的構(gòu)造方法,有參構(gòu)造方法輸入自己姓名,自己年齡,在構(gòu)造方法中如果年齡超出MaxAge則輸出出錯(cuò)信息并修改成默認(rèn)年齡。(7)編寫(xiě)測(cè)試類(lèi)使用接口Mankind來(lái)測(cè)試類(lèi)Man和Woman的多態(tài)性。(向上塑型和向下動(dòng)態(tài)綁定)以上三小問(wèn)的程序如下所示: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è)試類(lèi)完成
19、對(duì)多態(tài)性的測(cè)試,具體要求請(qǐng)參見(jiàn)課本171頁(yè)第5章課后習(xí)題8。該題的測(cè)試類(lèi)的代碼如下: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,"英語(yǔ)代表"),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)部類(lèi):定義一個(gè)類(lèi)Outer,類(lèi)中擁有私有成員變量a和成員方法output( )。在這個(gè)類(lèi)中定義一個(gè)內(nèi)部類(lèi)Inner,內(nèi)部類(lèi)中定義一個(gè)方法out( )修改外部類(lèi)的成員變量a的值,并調(diào)用外部類(lèi)的私有方法output( )。最后在外部類(lèi)的公有靜態(tài)main方法中調(diào)用內(nèi)部類(lèi)的方法。要求:測(cè)試使用兩種方式來(lái)調(diào)用內(nèi)部類(lèi)方法,第一種,在外部類(lèi)方法里面創(chuàng)建內(nèi)部類(lèi)對(duì)象,在main方法里面通過(guò)調(diào)用外部類(lèi)
22、的方法來(lái)間接調(diào)用內(nèi)部類(lè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)部類(lèi)對(duì)象,直接調(diào)用內(nèi)部類(lè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)部類(lèi):內(nèi)部類(lèi)可以聲明在方法內(nèi)部,甚至以匿名的形式聲明在new關(guān)鍵字后,試著填充下面的代碼,實(shí)現(xiàn)匿名的內(nèi)部類(lèi)。填充后代碼如下:package zi;import java.u
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度木屋安全監(jiān)控系統(tǒng)安裝合同4篇
- 2025年蘇教版必修1歷史下冊(cè)月考試卷含答案
- 2025年蘇科版九年級(jí)歷史上冊(cè)月考試卷
- 二零二五版美容院化妝品生產(chǎn)線技術(shù)合作合同3篇
- 2025年粵教新版高三歷史下冊(cè)月考試卷含答案
- 二零二五年度農(nóng)產(chǎn)品品牌營(yíng)銷(xiāo)策劃合同4篇
- 安徽農(nóng)民工就業(yè)指導(dǎo)與職業(yè)規(guī)劃合同范本(2025)2篇
- 二零二五年度民商法擔(dān)保合同爭(zhēng)議調(diào)解規(guī)則4篇
- 二零二五版美容美發(fā)行業(yè)技師職稱(chēng)評(píng)定合同3篇
- 二零二五年度新型農(nóng)藥農(nóng)膜研發(fā)與應(yīng)用合作合同2篇
- 第十七章-阿法芙·I·梅勒斯的轉(zhuǎn)變理論
- 焊接機(jī)器人在汽車(chē)制造中應(yīng)用案例分析報(bào)告
- 合成生物學(xué)在生物技術(shù)中的應(yīng)用
- 中醫(yī)門(mén)診病歷
- 廣西華銀鋁業(yè)財(cái)務(wù)分析報(bào)告
- 無(wú)違法犯罪記錄證明申請(qǐng)表(個(gè)人)
- 大學(xué)生勞動(dòng)教育PPT完整全套教學(xué)課件
- 繼電保護(hù)原理應(yīng)用及配置課件
- 《殺死一只知更鳥(niǎo)》讀書(shū)分享PPT
- 蓋洛普Q12解讀和實(shí)施完整版
- 2023年Web前端技術(shù)試題
評(píng)論
0/150
提交評(píng)論