實驗2 類與對象_第1頁
實驗2 類與對象_第2頁
實驗2 類與對象_第3頁
實驗2 類與對象_第4頁
實驗2 類與對象_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實驗二 類與對象一、 實驗?zāi)康?1) 掌握面向?qū)ο蟪绦蛟O(shè)計的方法和Java作為面向?qū)ο蟪绦蛟O(shè)計語言的特點(diǎn);(2) 掌握類得封裝與對象的使用;(3) 掌握修飾符和構(gòu)造方法的使用規(guī)則;(4) 掌握構(gòu)造方法的使用,方法重載用于多態(tài)(5) 掌握類的繼承,方法重構(gòu)與變量的隱藏(6) 掌握接口的特點(diǎn)、結(jié)構(gòu)、調(diào)用和繼承;(7) 掌握如何創(chuàng)建包,通過包如何管理類;(8) 掌握J(rèn)ava的繼承機(jī)制和實現(xiàn)多態(tài)的方法。二、 實驗要求(1)編寫一個體現(xiàn)面向?qū)ο笏枷氲某绦?;?)編寫一個創(chuàng)建對象和使用對象的方法的程序;(3)編寫體現(xiàn)類的繼承性(成員變量、成員方法、成員變量隱藏)的程序;(4)編寫體現(xiàn)類的多態(tài)性(成員方法重

2、載、構(gòu)造方法重載)的程序。(5)編寫一個接口,并使用它;(6)編寫自定義包的程序三、 實驗內(nèi)容(一)Java類的設(shè)計與編程1 創(chuàng)建一個 Application 應(yīng)用程序 Demo2_1.java 文件。在文件中定義兩個類。一個是CCircle,另一個是主類Demo2_1。 程序功能:描述一個圓類,其主要屬性為半徑,還有一個非常重要的常量是圓周率。該圓可以求出面積,可以設(shè)置半徑和取得半徑大小。class CCircle double pi; double radius;double getRadius() return radius; void setCircle(double r, doubl

3、e p) pi=p; radius=r; double getCircleArea() return pi*radius*radius; public class Demo2_1 public static void main(String args) CCircle cir1=new CCircle(); cir1.setCircle(2.0,3.1416); System.out.println("圓半徑="+cir1.getRadius(); System.out.println("圓面積="+cir1.getCircleArea(); cir1.

4、pi=3.14159; cir1.radius=10.0; System.out.println("圓半徑="+cir1.getRadius(); System.out.println("圓面積="+cir1.getCircleArea(); 【思考】 試述程序中兩個類的各自作用。 類CCircle都封裝了什么?求圓面積的初始數(shù)據(jù)是通過那個方法實現(xiàn)的?請修改程序采用構(gòu)造函數(shù)的方法初始化數(shù)據(jù)。 將class CCircle中的變量 double pi; double radius;加上private修飾符,進(jìn)行編譯會出現(xiàn)什么問題,為什么? 將void se

5、tCircle(double r, double p),double getRadius()和double getCircleArea()加上修飾符static,重新編譯會出現(xiàn)什么問題?仍用static,怎樣修改別的地方來糾正這個錯誤?在main中引用這些方法時不用創(chuàng)建對象則怎樣引用? (二)類的繼承設(shè)計1下面是一個具有繼承的程序RectangleDemo.java。類Volume繼承了父類Rectangle,主類是RectangleDemo。public class RectangleDemopublic static void main (String args) double resul

6、t;Volume obj1=new Volume (10,20,30); result=obj1.volume (); System.out.println ("得到的長方體體積 ="+result);result=obj1.area (); System.out .println ("得到的長方形面積 ="+result);result=obj1.volume (10.0); System.out.println ("立方體的體積="+result); class Rectangle double length; double wi

7、dth; double area() return length*width; Rectangle(double w,double l) length=l; width=w; class Volume extends Rectangle double height; Volume(double l,double w,double h) super(l,w); height=h; double volume() double vol; vol=area()*height; return vol; double volume(double y) return y*y*y; 【思考】 類Rectan

8、gleDemo起何作用?Volume類和Rectangle類之間有何關(guān)系? 解釋類Volume中 Volume(double l, double w, double h) 的作用,super(l,w) 語句的作用; 指出類Volume中方法 double volume()和double volume(double y)體現(xiàn)了面向?qū)ο蠹夹g(shù)的哪個性質(zhì)? 如果對類Rectangle中的方法 double area()加上修飾符private,程序能否通過編譯,為什么? 寫出程序運(yùn)行結(jié)果;2. 文件名為Demo2_3.java,該程序具有繼承、成員的覆蓋與隱藏概念。請運(yùn)行該程序然后分析。class F

9、atherint x=10,y=20; void speak() System.out.println("I am Father:"+"x="+x+":y="+y); void calculate(String s) System.out.println(s+"x*y="+x+"*"+y+"="+x*y);class Son extends Fatherint x=30; void speak() System.out.println("I am Son:"

10、;+"x="+x+":y="+y); void this_super() super.x=100; /修改父類中的x,y值 super.y=200; super.speak(); this.speak(); calculate("在子類中直接調(diào)用");/驗證父類中的值已被修改 x=200;/this.x=200; y=300;/this.y=300;向父類追蹤,相當(dāng)super.y public class Demo2_3 public static void main(String args) Father father=new Fa

11、ther(); Son son=new Son(); System.out.println("-調(diào)用father對象speak()和calculate()結(jié)果-"); father.speak(); father.calculate ("用father對象調(diào)用計算");/x*y=200 System.out.println("-調(diào)用son對象speak方法-"); son.speak(); System.out.println("-調(diào)用son對象的修改數(shù)據(jù)方法-"); son.this_super(); /用son

12、對象中的方法 System.out.println("-調(diào)用father對象計算方法-"); father.calculate("修改后用father對象調(diào)用"); System.out.println("-調(diào)用son對象計算方法-"); son.calculate("修改后用son對象調(diào)用");/x*y=100*300 System.out.println("I am main:"+"son.x="+son.x+":son.y="+son.y); 【思考

13、】子類Son中隱藏了父類Father那個變量?覆蓋了那個方法? 在子類Son方法void this_super()中,語句super.speak();this.speak();各有何作用? 輸出什么結(jié)果? 在子類Son方法void this_super()中,語句super.x=100; super.y=200; 修改的是哪個類x,y值?之后用什么方法驗證的,結(jié)果應(yīng)是什么? 在子類Son方法void this_super()中,語句x=200; y=300; 修改的是哪個類x,y值?用對象father.speak()和son.speak()與類定義中的super.speak();this.sp

14、eak();有何不同?參見運(yùn)行結(jié)果逐項分析程序得出結(jié)果的原因。(三)使用修飾符有時需要公開一些變量和方法,有時需要禁止其他對象使用變量和方法,這時可以使用修飾符來實現(xiàn)這個目的。常用的修飾符如下。public,private,protected,package,static,final,transient,volatile程序功能:通過兩個類StaticDemo、KY2_4 說明靜態(tài)變量/方法與實例變量/方法的區(qū)別。編寫類文件Demo2_4.java,程序源代碼如下:class StaticDemo static int x;int y;public static int getX() retu

15、rn x;public static void setX(int newX) x = newX;public int getY() return y;public void setY(int newY) y = newY;public class Demo2_4 public static void main(String args) System.out.println("靜態(tài)變量x="+StaticDemo.getX();System.out.println("實例變量y="+StaticDemo.getY(); / 非法,編譯時將出錯StaticD

16、emo a= new StaticDemo();StaticDemo b= new StaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println("靜態(tài)變量a.x="+a.getX();System.out.println("實例變量a.y="+a.getY();System.out.println("靜態(tài)變量b.x="+b.getX();System.out.println("實例變量b.y="+b.getY();對上面的源程序進(jìn)行

17、編譯,排錯并運(yùn)行。(四)接口實驗接口解決了 Java 不支持多重繼承的問題,可以通過實現(xiàn)多個接口達(dá)到與多重繼承相同的功能。程序文件Demo2_5.java。運(yùn)行該程序,然后按【思考】內(nèi)容修改和觀察程序。interface rec_Area_Peri int getArea(); int getPerimeter();class rectangle implements rec_Area_Periint width,length; rectangle(int w,int l) width=w; length=l; public int getArea() return width*length;

18、 public int getPerimeter() return (2*(width+length);public class Demo2_5public static void main(String args) rectangle rect=new rectangle(10,20); System.out.println("矩形面積="+rect.getArea(); System.out.println("矩形周長="+rect.getPerimeter(); 【思考】在實現(xiàn)類rectangle中注釋掉一個方法后進(jìn)行編譯,看發(fā)生了什么?為什么?在

19、實現(xiàn)類rectangle中將各實現(xiàn)方法前的public修飾符去掉再進(jìn)行編譯,看發(fā)生了什么?為什么?將接口rec_Area_Peri中定義的兩個方法前加上abstract修飾符再編譯,看對程序有影響否?為什么? 用單獨(dú)的實現(xiàn)類rectangle,直接在主類classe Ex5_1中實現(xiàn)那兩個方法,如何修改程序? 接口rec_Area_Peri中定義的兩個方法拆分定義成兩個接口,即每個接口只定義一個方法,程序?qū)⑷绾涡薷??(五)包的定義與使用 包是類和接口的集合。利用包可以把常用的類或功能相似的類放在一個包中。Java 語言提供系統(tǒng)包,其中包含了大量的類,可以在編寫 Java 程序時直接引用它們。為

20、便于管理和使用它們,將這些類 分為了不同的包。包又稱類庫或 API 包,所謂 API(Application Program Interface)即應(yīng)用程序接口。API 包方面提供豐富的類與方法供大家使用,如畫圖形、播放聲音等,另一方面又負(fù)責(zé)和系統(tǒng)軟硬件打交道,圓滿實現(xiàn)用戶程序的功能。所有 Java API 包都以“java.”開頭,以區(qū)別用戶創(chuàng)建的包。1. 不使用包(使用默認(rèn)包)在工程文件project1下創(chuàng)建兩個java文件,一個是mypack.java文件,定義兩個類classA和classB,類修飾符為默認(rèn)。另一個是主類文件,在該類中使用classA和classB。兩個java文件全部

21、使用默認(rèn)包。-mypack.java源代碼-class classAint a; void aaa() a=100; System.out.println("classA的輸出"+a); class classBint b;void bbb() b=200; System.out.println("classB的輸出"+b); -Demo2_6.java源代碼-public class Demo2_6public static void main(String args) classA objA=new classA(); classB objB=new

22、 classB(); objA.aaa(); objB.bbb(); 運(yùn)行Demo3_6,觀察運(yùn)行結(jié)果。2.采用包。兩個java文件用同一個包,即編譯后的三個class文件放在同一個mypackage1包中。 -mypack.java源代碼-package mypackage1;class classAint a; void aaa() a=100; System.out.println("classA的輸出"+a); class classBint b; void bbb() b=200; System.out.println("classB的輸出"+

23、b); -Ex5_2.java源代碼-package mypackage1;public class Ex5_2public static void main(String args) classA objA=new classA(); classB objB=new classB(); objA.aaa(); objB.bbb(); 運(yùn)行主類,觀察運(yùn)行結(jié)果?!咎崾尽咳缟蟽蓚€實驗表明封裝在同包里的類,只要成員不是私有的,相互之間透明,相當(dāng)在一個java文件中一樣使用。3. 按【思考】提示理解打包的應(yīng)用過程?!舅伎肌繉⒅黝愇募﨑emo2_6.java封裝在另一個包mypackage2,再進(jìn)行編譯

24、,看編譯結(jié)果提示什么錯誤?(提示:兩者不在同包,classA和classB不能被識別)。上條件不變,在主類class Demo2_6加進(jìn)import mypackage1.*語句,再編譯,看是什么編譯錯誤?(提示:載入了mypackag1包,可以識別這兩個class,但這兩個類不是public,不能被不同包使用)將類classA和classB修飾為public再編譯,看發(fā)生了什么?為什么?(提示:一個java文件中只能有一個public類且類名與文件名相同,因此每個public類用一個單獨(dú)的java文件,且文件名與類名相同)上面通過編譯后,再看Demo2_6還存在什么錯誤?(提示:classA和classB中的方法修飾符是默認(rèn)的,另一個包中的代碼允許訪問嗎?)將方法aaa()和bbb()修飾為public,重新編譯,所有錯誤是否消失?無錯誤后可運(yùn)行主類,觀察運(yùn)行結(jié)果。四、 實驗練習(xí)題1、在文件Testex2_1.java文件中

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論