-類繼承與接口(三)實(shí)驗(yàn)報(bào)告_第1頁(yè)
-類繼承與接口(三)實(shí)驗(yàn)報(bào)告_第2頁(yè)
-類繼承與接口(三)實(shí)驗(yàn)報(bào)告_第3頁(yè)
-類繼承與接口(三)實(shí)驗(yàn)報(bào)告_第4頁(yè)
-類繼承與接口(三)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、浙江大學(xué)城市學(xué)院實(shí)驗(yàn)報(bào)告課程名稱: 面向?qū)ο蟪绦蛟O(shè)計(jì) 實(shí)驗(yàn)項(xiàng)目名稱: 類繼承與接口 (三) 學(xué)生姓名: 專業(yè): 軟件工程 學(xué)號(hào): 實(shí)驗(yàn)地點(diǎn): 實(shí)驗(yàn)日期: 年 月 日【實(shí)驗(yàn)?zāi)康摹? 鞏固Java類繼承的相關(guān)知識(shí)2 理解對(duì)象上轉(zhuǎn)型技術(shù)的優(yōu)點(diǎn)和用途。3 掌握接口的特點(diǎn)4 接口與抽象類的異同之處【實(shí)驗(yàn)內(nèi)容】一、類繼承相關(guān)知識(shí)強(qiáng)化1. 執(zhí)行以下程序,給出執(zhí)行Bbb的結(jié)果,并說(shuō)明指出類Bbb的this.i與super.i的含義(即它們都對(duì)應(yīng)哪個(gè)變量)。 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的含義(即它們都對(duì)應(yīng)哪個(gè)類中定義的變量):this.i和super.i 都對(duì)應(yīng)Aaa中的變量2接著上面例子,將類Bbb改寫(xiě)為以下代碼,請(qǐng)寫(xiě)出程序運(yùn)行結(jié)果,并說(shuō)明這個(gè)例子與上面例子的區(qū)別。class Bbb extends Aaa int i= -1,j= -1,k= -1;

3、/比上面例子增加一個(gè)實(shí)例變量i; Bbb(int i) super(i); j = this.i; /本語(yǔ)句含義是: k = super.i; /本語(yǔ)句含義是: public static void main(String args) Bbb b = new Bbb(18); System.out.println(b.j +"t" + b.k); 執(zhí)行Bbb的結(jié)果:這個(gè)例子與上面例子的區(qū)別:this.i對(duì)應(yīng)Bbb中的isuper.i對(duì)應(yīng)Aaa中的i 3.對(duì)以下程序,給出執(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í)行了那個(gè)類中定義的方法: 上面b.show(1);執(zhí)行了那個(gè)類中定義的方法: 上面c.show(1)執(zhí)行了那個(gè)類中定義的方法: 分析: 因?yàn)閳?zhí)行的是有參數(shù)的void show()所以調(diào)用的是Aaa中的方法。C是上轉(zhuǎn)型所以也是調(diào)用Aaa中的方法4. 對(duì)以下程序,給出執(zhí)行Bbb的結(jié)果,并分析這個(gè)例子結(jié)果與前面第4個(gè)例子,你可以得出什么結(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進(jìn)行的向上轉(zhuǎn)型,將子類對(duì)象引用轉(zhuǎn)換為超類類型。所以c.i引用的是超類中的I 而也可以通過(guò)(Bbb)c向下轉(zhuǎn)型 二、程序分析思考以下是例5.22的部分關(guān)鍵代碼,請(qǐng)分析思考以下問(wèn)題:(1) Student類中設(shè)計(jì)抽象方法cost會(huì)帶來(lái)什么好處?因?yàn)椴煌膶W(xué)生所需要的學(xué)費(fèi)不同,所以用抽象cost方法在不用的學(xué)生中調(diào)用cost 執(zhí)行不同

8、的代碼返回對(duì)應(yīng)的值。(2) Student類的compareCost方法可以用于比較哪些類型的對(duì)象?如果沒(méi)有設(shè)計(jì)抽象方法cost,那么會(huì)發(fā)生什么問(wèn)題? 可以比較上轉(zhuǎn)型對(duì)象和子類對(duì)象。如果沒(méi)有抽象方法cost那么就必須在每一個(gè)子類都編寫(xiě)一個(gè)compareCost 導(dǎo)致太多的重復(fù)代碼。注意:分析重點(diǎn)是軟件設(shè)計(jì)的通用性考慮。abstract class Student /定義學(xué)生對(duì)象的抽象超類private String name;public Student(String name) = name; public abstract double cost();/聲明抽象方法,表

9、示學(xué)習(xí)費(fèi)用public double compareCost(Student otherStudent)/當(dāng)前對(duì)象與參數(shù)對(duì)象的費(fèi)用比較return this.cost() - otherStudent.cost(); /返回大于、等于、小于零的數(shù)字public String getName()return ; public void setName(String name) = name; class StudentCostToolstatic double sumCost(Student students)/計(jì)算students所有學(xué)生的費(fèi)用之和doub

10、le sum = 0;for(int i=0;i<students.length;i+)sum = sum + studentsi.cost();return sum;static double averageCost(Student students)/計(jì)算students學(xué)生的平均費(fèi)用return sumCost(students)/students.length;static double maxCost(Student students)/計(jì)算students所有學(xué)生的費(fèi)用最大值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();三、接口與抽象類實(shí)驗(yàn)1. 編譯下面的程序, 指出錯(cuò)誤.interface A /語(yǔ)句1 void show(); void show(int i) System.out.println("A show()"); (1) 是否出錯(cuò)? 出錯(cuò)原因? 是,接口A必須是抽象方法即不能有實(shí)現(xiàn)代碼。(2) 如果將上面語(yǔ)句1的in

12、terface改為abstract class , 編譯是否出錯(cuò)? (提示: 注意abstract修飾符) 是 。之后變成了抽象類,那么void show()前面也應(yīng)該加absrtract(3)根據(jù)上面的(1)和(2), 可以看出接口與抽象類的什么區(qū)別? 接口中只能聲明抽象方法,抽象類中既能聲明抽象方法,也能聲明非抽象方法,但抽象方法前面需要加上abstract。接口則不需要。2. 編譯下面的程序, 指出錯(cuò)誤.interface IA void show(); void show(int i);class A implements IA /語(yǔ)句1 public void show(int i)

13、 /語(yǔ)句2 System.out.println("A show()"); (1) 上面的程序編譯是否出錯(cuò)? 出錯(cuò)原因? 出錯(cuò),void show沒(méi)有實(shí)現(xiàn) (2) 如果將語(yǔ)句1中的class 改為abstract class, 編譯是否出錯(cuò)? 為何? 否,因?yàn)槌橄箢惪梢圆痪唧w實(shí)現(xiàn)。(3) 如果將語(yǔ)句2中的public刪除, 編譯是否出錯(cuò)? 為何? 出錯(cuò), 因?yàn)?interface中的方法都是public 所以子類中也應(yīng)該聲明為public 3. 編譯下面的程序, 回答問(wèn)題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) 編譯是否出錯(cuò)? 出錯(cuò) (2) 類A的定義編譯是否出錯(cuò)? 說(shuō)明什么?(考慮抽象類中是否可以沒(méi)有抽象方法)不出錯(cuò),因?yàn)槌橄箢愔惺欠窨梢詻](méi)有抽象方法4. 編譯下面的程序, 回答問(wèn)題abstract class A static abstract void show();class B extends A public static void main(String args) show();

15、 (1) 上面的程序編譯是否出錯(cuò)?是(2) 如何改正?abstract class Apublic static abstract void show();5. 編譯下面的程序, 回答問(wèn)題interface IA int i; void show();(1) 上面的程序編譯是否出錯(cuò)? 是 ,(2) 如果出錯(cuò), 錯(cuò)在何處? I應(yīng)該是一個(gè)靜態(tài)常量 需要賦值6. 編譯下面的程序, 回答問(wèn)題.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) 上面的程序編譯是否出錯(cuò)? 否(2) 代碼1和代碼3的區(qū)別是什么? 同樣, 代碼2與代碼4的區(qū)別是什么? 1 方法的聲明,3是方法的實(shí)現(xiàn)7. 編譯下面的程序, 回答問(wèn)題.abstract class A void show1()abstract class B void show2() class C extends A,B void show3()(1) 上面的程序編譯是否出錯(cuò)? 出錯(cuò)(2) 如果出錯(cuò), 錯(cuò)在何處? 類不能多重繼承8. 編譯下面的程序, 回答問(wèn)題.final

17、 class A void show()class B extends A void show2()(1) 上面的程序編譯是否出錯(cuò)? 是 (2) 如果出錯(cuò), 錯(cuò)在何處? Final定義的不能繼承9. 編譯下面的程序, 回答問(wèn)題.class A final void show()class B extends A void show() System.out.println("aaa"); (1) 上面的程序編譯是否出錯(cuò)? 出錯(cuò)(2) 如果出錯(cuò), 錯(cuò)在何處? Final類不能被覆蓋10. 編譯下面的程序, 回答問(wèn)題.interface IA /沒(méi)有定義任何成員class B

18、/沒(méi)有定義任何成員(1) 上面的程序編譯是否出錯(cuò)? 否(2) 如果沒(méi)有出錯(cuò), 你可以得出什么結(jié)論? 接口和類都可以為空11編譯并運(yùn)行下面程序,分析運(yùn)行結(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論