




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、浙江大學城市學院實驗報告課程名稱: 面向對象程序設計 實驗項目名稱: 類繼承與接口 (三) 學生姓名: 專業(yè): 軟件工程 學號: 實驗地點: 實驗日期: 年 月 日【實驗目的】1 鞏固Java類繼承的相關知識2 理解對象上轉型技術的優(yōu)點和用途。3 掌握接口的特點4 接口與抽象類的異同之處【實驗內容】一、類繼承相關知識強化1. 執(zhí)行以下程序,給出執(zhí)行Bbb的結果,并說明指出類Bbb的this.i與super.i的含義(即它們都對應哪個變量)。 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的結果: this.i與super.i的含義(即它們都對應哪個類中定義的變量):this.i和super.i 都對應Aaa中的變量2接著上面例子,將類Bbb改寫為以下代碼,請寫出程序運行結果,并說明這個例子與上面例子的區(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的結果:這個例子與上面例子的區(qū)別:this.i對應Bbb中的isuper.i對應Aaa中的i 3.對以下程序,給出執(zhí)行Bbb的結果,并分析Bbb中main方法中a.show(1), b.show(1), c.show(1
4、)的結果。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的結果:上面a.show(1)執(zhí)行了那個類中定義的方法: 上面b.show(1);執(zhí)行了那個類中定義的方法: 上面c.show(1)執(zhí)行了那個類中定義的方法: 分析: 因為執(zhí)行的是有參數的void show()所以調用的是Aaa中的方法。C是上轉型所以也是調用Aaa中的方法4. 對以下程序,給出執(zhí)行Bbb的結果,并分析這個例子結果與前面第4個例子,你可以得出什么結論。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的結果: (Bbb)c).show()執(zhí)行結果: System.out.println(c.i)執(zhí)行結果: System.out.println(Bbb)c).i)執(zhí)行結果: 分析與結論:C進行的向上轉型,將子類對象引用轉換為超類類型。所以c.i引用的是超類中的I 而也可以通過(Bbb)c向下轉型 二、程序分析思考以下是例5.22的部分關鍵代碼,請分析思考以下問題:(1) Student類中設計抽象方法cost會帶來什么好處?因為不同的學生所需要的學費不同,所以用抽象cost方法在不用的學生中調用cost 執(zhí)行不同
8、的代碼返回對應的值。(2) Student類的compareCost方法可以用于比較哪些類型的對象?如果沒有設計抽象方法cost,那么會發(fā)生什么問題? 可以比較上轉型對象和子類對象。如果沒有抽象方法cost那么就必須在每一個子類都編寫一個compareCost 導致太多的重復代碼。注意:分析重點是軟件設計的通用性考慮。abstract class Student /定義學生對象的抽象超類private String name;public Student(String name) = name; public abstract double cost();/聲明抽象方法,表
9、示學習費用public double compareCost(Student otherStudent)/當前對象與參數對象的費用比較return this.cost() - otherStudent.cost(); /返回大于、等于、小于零的數字public String getName()return ; public void setName(String name) = name; class StudentCostToolstatic double sumCost(Student students)/計算students所有學生的費用之和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學生的平均費用return sumCost(students)/students.length;static double maxCost(Student students)/計算students所有學生的費用最大值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必須是抽象方法即不能有實現代碼。(2) 如果將上面語句1的in
12、terface改為abstract class , 編譯是否出錯? (提示: 注意abstract修飾符) 是 。之后變成了抽象類,那么void show()前面也應該加absrtract(3)根據上面的(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沒有實現 (2) 如果將語句1中的class 改為abstract class, 編譯是否出錯? 為何? 否,因為抽象類可以不具體實現。(3) 如果將語句2中的public刪除, 編譯是否出錯? 為何? 出錯, 因為 interface中的方法都是public 所以子類中也應該聲明為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應該是一個靜態(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是方法的實現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) 如果沒有出錯, 你可以得出什么結論? 接口和類都可以為空11編譯并運行下面程序,分析運行結果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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 深入分析2025年創(chuàng)業(yè)扶持政策的嘉獎機制試題及答案
- 綠色建筑材料市場推廣策略與政策支持下的區(qū)域市場研究
- 小學摸底測試題及答案
- 物理實驗中誤差分析的技巧試題及答案
- 理解分銷渠道的商務英語試題及答案
- 環(huán)保站面試真題及答案
- 線下演出市場復蘇2025年劇院運營成本控制案例報告
- 數字人民幣2025跨境支付技術挑戰(zhàn)與跨境支付清算效率提升報告
- 2025公務員考試常用題目及答案
- 政策激勵下的創(chuàng)業(yè)者精神探討試題及答案
- 基于MATLAB的電流、電壓互感器特性的仿真分析
- 操作系統課程設計報告
- 醫(yī)保監(jiān)管容錯機制研究報告
- 《臨床研究注冊》課件
- 2023年貴州煙草專賣局筆試試題
- 員工身心健康情況排查表
- 訂購單模板(訂貨單模板)
- 光子量子計算技術
- 表B. 0 .11工程款支付報審表
- 二手車培訓-銷售顧問
- 檔案袋密封條格式范本(可直接打印,可自行編輯)
評論
0/150
提交評論