




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、浙江大學(xué)城市學(xué)院實驗報告課程名稱: 面向?qū)ο蟪绦蛟O(shè)計 實驗項目名稱: 類繼承與接口 (三) 學(xué)生姓名: 專業(yè): 軟件工程 學(xué)號: 實驗地點: 實驗日期: 年 月 日【實驗?zāi)康摹? 鞏固Java類繼承的相關(guān)知識2 理解對象上轉(zhuǎn)型技術(shù)的優(yōu)點和用途。3 掌握接口的特點4 接口與抽象類的異同之處【實驗內(nèi)容】一、類繼承相關(guān)知識強化1. 執(zhí)行以下程序,給出執(zhí)行Bbb的結(jié)果,并說明指出類Bbb的this.i與super.i的含義(即它們都對應(yīng)哪個變量)。 class Aaa int i; Aaa(int a) i = a;class Bbb extends Aaa int j,k; Bbb(int i) s
2、uper(i); j = this.i; k = super.i; public static void main(String args) Bbb b = new Bbb(18); System.out.println(b.j +"t" + b.k); 執(zhí)行Bbb的結(jié)果: this.i與super.i的含義(即它們都對應(yīng)哪個類中定義的變量):this.i和super.i 都對應(yīng)Aaa中的變量2接著上面例子,將類Bbb改寫為以下代碼,請寫出程序運行結(jié)果,并說明這個例子與上面例子的區(qū)別。class Bbb extends Aaa int i= -1,j= -1,k= -1;
3、/比上面例子增加一個實例變量i; Bbb(int i) super(i); j = this.i; /本語句含義是: k = super.i; /本語句含義是: public static void main(String args) Bbb b = new Bbb(18); System.out.println(b.j +"t" + b.k); 執(zhí)行Bbb的結(jié)果:這個例子與上面例子的區(qū)別:this.i對應(yīng)Bbb中的isuper.i對應(yīng)Aaa中的i 3.對以下程序,給出執(zhí)行Bbb的結(jié)果,并分析Bbb中main方法中a.show(1), b.show(1), c.show(1
4、)的結(jié)果。class Aaa void show() System.out.println("Aaa中定義的show()"); void show(int i) System.out.println("Aaa中定義的show(int i)"); class Bbb extends Aaa void show() System.out.println("Bbb中定義的show()"); public static void main(String args) Aaa a = new Aaa(); Bbb b = new Bbb(); A
5、aa c = new Bbb(); a.show(1); b.show(1); c.show(1); 執(zhí)行Bbb的結(jié)果:上面a.show(1)執(zhí)行了那個類中定義的方法: 上面b.show(1);執(zhí)行了那個類中定義的方法: 上面c.show(1)執(zhí)行了那個類中定義的方法: 分析: 因為執(zhí)行的是有參數(shù)的void show()所以調(diào)用的是Aaa中的方法。C是上轉(zhuǎn)型所以也是調(diào)用Aaa中的方法4. 對以下程序,給出執(zhí)行Bbb的結(jié)果,并分析這個例子結(jié)果與前面第4個例子,你可以得出什么結(jié)論。class Aaa int i = 10;static void show() System.out.println(
6、"Aaa中定義的show()"); class Bbb extends Aaa int i = 20; static void show() System.out.println("Bbb中定義的show()"); public static void main(String args) Aaa a = new Aaa(); Bbb b = new Bbb(); Aaa c = new Bbb(); a.show(); b.show(); c.show(); (Bbb)c).show(); System.out.println(c.i); /考慮此處 S
7、ystem.out.println(Bbb)c).i); /考慮此處 執(zhí)行Bbb的結(jié)果: (Bbb)c).show()執(zhí)行結(jié)果: System.out.println(c.i)執(zhí)行結(jié)果: System.out.println(Bbb)c).i)執(zhí)行結(jié)果: 分析與結(jié)論:C進行的向上轉(zhuǎn)型,將子類對象引用轉(zhuǎn)換為超類類型。所以c.i引用的是超類中的I 而也可以通過(Bbb)c向下轉(zhuǎn)型 二、程序分析思考以下是例5.22的部分關(guān)鍵代碼,請分析思考以下問題:(1) Student類中設(shè)計抽象方法cost會帶來什么好處?因為不同的學(xué)生所需要的學(xué)費不同,所以用抽象cost方法在不用的學(xué)生中調(diào)用cost 執(zhí)行不同
8、的代碼返回對應(yīng)的值。(2) Student類的compareCost方法可以用于比較哪些類型的對象?如果沒有設(shè)計抽象方法cost,那么會發(fā)生什么問題? 可以比較上轉(zhuǎn)型對象和子類對象。如果沒有抽象方法cost那么就必須在每一個子類都編寫一個compareCost 導(dǎo)致太多的重復(fù)代碼。注意:分析重點是軟件設(shè)計的通用性考慮。abstract class Student /定義學(xué)生對象的抽象超類private String name;public Student(String name) = name; public abstract double cost();/聲明抽象方法,表
9、示學(xué)習(xí)費用public double compareCost(Student otherStudent)/當前對象與參數(shù)對象的費用比較return this.cost() - otherStudent.cost(); /返回大于、等于、小于零的數(shù)字public String getName()return ; public void setName(String name) = name; class StudentCostToolstatic double sumCost(Student students)/計算students所有學(xué)生的費用之和doub
10、le sum = 0;for(int i=0;i<students.length;i+)sum = sum + studentsi.cost();return sum;static double averageCost(Student students)/計算students學(xué)生的平均費用return sumCost(students)/students.length;static double maxCost(Student students)/計算students所有學(xué)生的費用最大值if(students.length = 1) return students0.cost();int
11、 index = 0;for(int i=0;i<students.length;i+)if(pareCost(studentsi) < 0)index = i;return studentsindex.cost();三、接口與抽象類實驗1. 編譯下面的程序, 指出錯誤.interface A /語句1 void show(); void show(int i) System.out.println("A show()"); (1) 是否出錯? 出錯原因? 是,接口A必須是抽象方法即不能有實現(xiàn)代碼。(2) 如果將上面語句1的in
12、terface改為abstract class , 編譯是否出錯? (提示: 注意abstract修飾符) 是 。之后變成了抽象類,那么void show()前面也應(yīng)該加absrtract(3)根據(jù)上面的(1)和(2), 可以看出接口與抽象類的什么區(qū)別? 接口中只能聲明抽象方法,抽象類中既能聲明抽象方法,也能聲明非抽象方法,但抽象方法前面需要加上abstract。接口則不需要。2. 編譯下面的程序, 指出錯誤.interface IA void show(); void show(int i);class A implements IA /語句1 public void show(int i)
13、 /語句2 System.out.println("A show()"); (1) 上面的程序編譯是否出錯? 出錯原因? 出錯,void show沒有實現(xiàn) (2) 如果將語句1中的class 改為abstract class, 編譯是否出錯? 為何? 否,因為抽象類可以不具體實現(xiàn)。(3) 如果將語句2中的public刪除, 編譯是否出錯? 為何? 出錯, 因為 interface中的方法都是public 所以子類中也應(yīng)該聲明為public 3. 編譯下面的程序, 回答問題abstract class A public void show() System.out.print
14、ln("A show()"); class AbstractClassTest public static void main(String args) A a = new A(); (1) 編譯是否出錯? 出錯 (2) 類A的定義編譯是否出錯? 說明什么?(考慮抽象類中是否可以沒有抽象方法)不出錯,因為抽象類中是否可以沒有抽象方法4. 編譯下面的程序, 回答問題abstract class A static abstract void show();class B extends A public static void main(String args) show();
15、 (1) 上面的程序編譯是否出錯?是(2) 如何改正?abstract class Apublic static abstract void show();5. 編譯下面的程序, 回答問題interface IA int i; void show();(1) 上面的程序編譯是否出錯? 是 ,(2) 如果出錯, 錯在何處? I應(yīng)該是一個靜態(tài)常量 需要賦值6. 編譯下面的程序, 回答問題.interface IA int i=100; void show(); /代碼1interface IB int j=100; void show(int a); /代碼2class A implements
16、IA,IB public void show()/代碼3 public void show(int a) /代碼4(1) 上面的程序編譯是否出錯? 否(2) 代碼1和代碼3的區(qū)別是什么? 同樣, 代碼2與代碼4的區(qū)別是什么? 1 方法的聲明,3是方法的實現(xiàn)7. 編譯下面的程序, 回答問題.abstract class A void show1()abstract class B void show2() class C extends A,B void show3()(1) 上面的程序編譯是否出錯? 出錯(2) 如果出錯, 錯在何處? 類不能多重繼承8. 編譯下面的程序, 回答問題.final
17、 class A void show()class B extends A void show2()(1) 上面的程序編譯是否出錯? 是 (2) 如果出錯, 錯在何處? Final定義的不能繼承9. 編譯下面的程序, 回答問題.class A final void show()class B extends A void show() System.out.println("aaa"); (1) 上面的程序編譯是否出錯? 出錯(2) 如果出錯, 錯在何處? Final類不能被覆蓋10. 編譯下面的程序, 回答問題.interface IA /沒有定義任何成員class B
18、/沒有定義任何成員(1) 上面的程序編譯是否出錯? 否(2) 如果沒有出錯, 你可以得出什么結(jié)論? 接口和類都可以為空11編譯并運行下面程序,分析運行結(jié)果interface IStudent void showDetail();class Student implements IStudent String name; int age; Student() Student(String name,int age) = name; this.age = age; public void showDetail() System.out.println(name+"t"+age); class GraduateStudent implements IStudent String name; int age; String major; GraduateStudent() GraduateStudent(Stri
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽音樂學(xué)院《相對論》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西林業(yè)職業(yè)技術(shù)學(xué)院《市場營銷模擬實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 江蘇農(nóng)牧科技職業(yè)學(xué)院《英語課程與教學(xué)論I》2023-2024學(xué)年第二學(xué)期期末試卷
- ??诮?jīng)濟學(xué)院《建筑規(guī)范》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱學(xué)院《公共關(guān)系學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西北工業(yè)大學(xué)《科學(xué)與工程計算》2023-2024學(xué)年第二學(xué)期期末試卷
- 社區(qū)婦女的保健和護理說課講課件
- 教學(xué)課件電腦軟件
- 包裝廣告制作方案簡單(3篇)
- 燈具工廠招商方案模板(3篇)
- 河北省部分校2024-2025學(xué)年九年級下學(xué)期開學(xué)測試歷史試題(含答案)
- 智能機器人技術(shù)研發(fā)戰(zhàn)略合作協(xié)議
- 233KWh 定制戶外一體柜儲能系統(tǒng)項目技術(shù)方案
- 2024-2030年中國電船行業(yè)前景展望及投資戰(zhàn)略分析報告
- 2025版國家開放大學(xué)法學(xué)本科《知識產(chǎn)權(quán)法》期末紙質(zhì)考試第三大題名詞解釋題庫
- 保安反恐防暴培訓(xùn)
- 《無人機測繪技術(shù)》項目2任務(wù)1無人機航測任務(wù)規(guī)劃
- 新能源汽車充電樁項目可行性研究報告模板及范文
- 電力市場概論張利課后參考答案
- 2024版首診負責(zé)制度課件
- 人工智能在教育行業(yè)的創(chuàng)新應(yīng)用研究
評論
0/150
提交評論