級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)))_第1頁
級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)))_第2頁
級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)))_第3頁
級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)))_第4頁
級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)))_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2016級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) 上機(jī)實(shí)驗(yàn)三:面向?qū)ο蟪绦蛟O(shè)計 (繼承、封裝、多態(tài) ) 類是面向?qū)ο蟪绦蛟O(shè)計的基礎(chǔ),是Java的核心和本質(zhì)所在,在Java中,所有的語言元 素都封裝在類中。編寫java程序的過程就是從現(xiàn)實(shí)世界中抽象出java可實(shí)現(xiàn)的類,并用合適 的語句定義它們的過程, 本節(jié)將學(xué)習(xí)類的應(yīng)用, 以及如何創(chuàng)建類的實(shí)例, 通過類的繼承更有 效的組織程序結(jié)構(gòu), 明確類之間的關(guān)系。 掌握本節(jié)所講的內(nèi)容后, 讀者就可以使用面向?qū)ο?技術(shù)編寫java程序了。 接口是特殊的抽象類, 只包含常量和方法的定義, 而沒有方法的實(shí)現(xiàn), 也就是說接口是 方法定義和常量

2、值的集合。 包是Java語言中有效管理類的一個機(jī)制。 通過關(guān)鍵字package聲明包語句,package語句 作為Java源文件的第一條語句,指明該源文件定義的類所在的包。使用import語句可以引 入包中的類。 一、實(shí)驗(yàn)?zāi)康?1) 掌握類的定義和使用 2) 掌握對象的聲明和使用 3) 了解構(gòu)造函數(shù)的概念和使用 4) 掌握類的繼承關(guān)系和派生方法 5) 掌握多態(tài)的概念與使用 6) 掌握接口的定義和使用 7) 掌握J(rèn)ava中包的應(yīng)用 二、實(shí)驗(yàn)內(nèi)容 1) 類的聲明 2) 定義類成員變量以及成員方法 3) 實(shí)例化類、創(chuàng)建類對象以及類方法的調(diào)用 4) 類的繼承 5) 通過實(shí)例理解接口的定義 6) 通過實(shí)

3、例熟悉接口的應(yīng)用 7) 正確應(yīng)用 Java 中包和 import 語句 三、實(shí)驗(yàn)步驟 1) 類和類的實(shí)例化 一個類的實(shí)現(xiàn)包括兩部分:類聲明和類體。 (1) 、類聲明 publicabstractfinal class className extends superclassName implements interfaceNameList 期中修飾符 publicabstractfinal 說明類的屬性 className 為類名 superclassName為父類的名字 interfaceNameList為類實(shí)現(xiàn)的接口列表 (2)、類體 類體定義如下 class className publ

4、ic|protected|private static Type variableName;成員變量 fin al tra nsie nt volatile public|protected|private static fin al abstract n ativesynchroni zed retur nType meth on dName ( paramList) throws exception List stateme nts成員方法 (3)、成員變量 成員變量的聲明方式如下 public|protected|private staticfin altra nsie nt volat

5、ile Type variableName;成員變量 其中:public|protected|private宀可見性 static t 靜態(tài)變量(類變量),相當(dāng)于實(shí)例變量 final t 常量 transient t 暫時性變量,用于對象存檔 volatile t變量,用于共發(fā)線程的共享 (4)、成員方法 public|protected|private static fin al abstract n ative synchroni zed return Type meth on dName ( paramList ) throws excepti on List/ 方法體的聲明 state

6、me nts 方法體 其中:public|protected|private t可見性 static t靜態(tài)方法,也叫類方法,可以通過類名直接調(diào)用 fin alt方法不能被重寫 abstract t抽象方法,沒有方法體(體現(xiàn)多態(tài)時常用) native t集成其他語言的代碼 synchronized t控制多個并發(fā)線程的訪問 例子3-1請根據(jù)注釋填寫語句,并上機(jī)調(diào)試成功 根據(jù)注釋添加語句,并調(diào)試和修改程序,使其能夠執(zhí)行。 class Reta ngle public Reta ngle(double l, double w) len gth = l; width = w; public doub

7、le calcPerimeter() / 返回周長 O public double calcArea() / 返回面積 (2) 2 / 14 2016級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) public void Show() /顯示矩形的長和寬 (3) protected double len gth; protected double width; class Square exte nds Reta ngle public Square(double side) /調(diào)用父類的構(gòu)造方法 . public double calcPerimeter() return w

8、idth * 4; public void Show() System.out.pri ntln(邊長為”+ width + 的正方形”); public class Test public static void main(String args) Square sq1= new Square(2.0); sq1.Show(); System.out.println(” 正方形的邊長為+sq1.calcPerimeter(); (1) return (width+le ngth)*2; (2) retur n width*le ngth; System-.-o-.-3-ifi-lengi-h

9、=-+leng-h+-n-+widl-i=-+wjdl-d 填寫的語句是(4)super(side,side); 4 / 14 class Reta ngle public len gth public public public System. protected protected Reta ngle( =l; double double double l, width = w; calcPerimeter() return ( width calcArea() return void Show() out .print( double double width double / w) +

10、 le ngth /返回面積 返回周長 )*2; class Square exte nds * length ; /顯示矩形的長和寬 len gth=+le ngth +n length width Reta ngle +width= +width ); /調(diào)用父類的構(gòu)造方法 publicSquare( double side) super (side,side); publicdoublecalcPerimeter() return width * 4; public void Show() System.out .println( 邊長為“ + width +的正方形“); 2016級j

11、ava語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) II( 6 I 14 public class Test public static voidmai n(Stri ng args) Square sq1= new Square(2.0); sq1.Show(); System. out .println(正方形的周長為+sq1.calcPerimeter(); 2) 類的繼承 繼承是面向?qū)ο蟪绦蛟O(shè)計的方法中的一種重要手段,通過繼承可以更有效的組織程序 的結(jié)構(gòu),明確類之間的關(guān)系。 繼承通過extends關(guān)鍵字來實(shí)現(xiàn),子類繼承父類的屬性和行為, 同時可以修改父類的屬性和行為,并添加新的

12、屬性和行為。Java不支持多重繼承。 創(chuàng)建子類的格式如下 class SubClass exte nds SuperClass 其中Subclass子類的名稱 exte ndsf繼承的關(guān)鍵字 Superclass父類的名字 例子3-2請分析程序,填寫語句的功能注釋,并上機(jī)調(diào)試成功。 下面這個例子通過點(diǎn)、圓的層次結(jié)構(gòu),介紹類的繼承。 import java.text.DecimalFormat; import javax.swi ng.JOptio nPane; II調(diào)用格式化數(shù)字輸出 / joptionpane讓您輕松彈出一個標(biāo)準(zhǔn)的對話框 class Poi nt protected int

13、x,y ; public Poi nt() setPoi nt(0,0); public Poin t(i nt a,i nt b) setPoi nt(a,b); public void setPo in t(i nt a,i nt b) 1) II父類點(diǎn)的的定義 II定義點(diǎn)的坐標(biāo) II確定構(gòu)造函數(shù) II構(gòu)造函數(shù)重載帶參數(shù)的構(gòu)造函數(shù) x=a; 2016級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) y=b; public int getX()return x;/獲得 X 的坐標(biāo) public int getY() return y;/ 獲得 Y 的坐標(biāo) public Stri

14、 ng toStri ng() return +x+,+y+; /*子類圓的定義*/ class Circle exte nds Poi nt / 圓類繼承父類點(diǎn)類 protected double radius ;/ 定義圓的半徑 public Circle() setRadius(O);/定義子類的構(gòu)造函數(shù),隱含調(diào)用了父類的構(gòu)造函數(shù) public Circle(double r,i nt a,i nt b) super(a,b);(2) setRadius(r); public void setRadius(double r) radius = (r=O.O?r:O.O); /(3 pub

15、lic double getRadius() / 獲得圓半徑 return radius; public double area() / (4) return Math. Pl*radius*radius; public String toString()/圓的半徑。以及圓心坐標(biāo)轉(zhuǎn)換成字符串輸出 return Ce nter=+x+,+y+;Radius=+radius; public class In herita nceTest public static void main(String args) Point pointRef,p;聲明兩點(diǎn)對象 Circle circleRef,c;/

16、 聲明兩圓對象 Stri ng output;/定義一個字符串變量 p=new Point(3O,5O); 給點(diǎn)對象賦值 c=new Circle (2.7,12O,89); 給圓對象賦值 把點(diǎn)對象和圓對象轉(zhuǎn)換成字符串后給字符串output賦值 output=Poi ntp:+p.toStri ng()+nCirclec:+c.toStri ng(); poin tRef=c; output=output+nn Circle c(via poin eRef):+po in tRef.toStri ng(); circleRef=(Circle)pointRef; _ output=output

17、+nn Circle c(via poin eRef):+circleRef.toStri ng(); DecimalFormat precisi on2=new DecimalFormat(0.00); output+= n Areaofc(via circleRef):+precisi on 2.format(circleRef.area(); 將圓定義成點(diǎn)對象輸出 if( p in sta nceof Circle )/(5) circleRef=(Circle) p; output+=nn cast successful; elseoutput+=nn p dose not refer

18、 to a Circle; /利用對話框輸出相關(guān)信息 JOpti onPan e.showMessageDialog( null,output, In herita nceTset,JOptio nPa neNFORMATION_MESSAGE); 退出 System.exit(0); 語句的功能注釋: (1) (2) (3) (4) 方法成員,設(shè)置變量 調(diào)用父類的構(gòu)造函數(shù) 設(shè)置半徑 求取面積 2. 接口的定義與應(yīng)用 接口聲明的形式如下所示: in terface接口名字 8 / 14 2016級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) /常量定義和方法定義 接口使用的關(guān)鍵

19、字是 implements ,形式如下所示: class A implements Printable , Addable 其中類 A 中使用接口 Printable 和 Addable 接口的特點(diǎn): 1. 類體中必須實(shí)現(xiàn)接口中定義的所有方法; 2. 接口中的方法和常量必須是 public 的。 3. 實(shí)現(xiàn)方法時,方法頭必須一致(返回值類型,名字,參數(shù)) ; 4. 父類被繼承時,接口同時被繼承; 5. 接口也可被繼承,關(guān)鍵字為 extends ; 6. 接口一般表示功能,而類一般表示屬性。 例子 3-3 本實(shí)例實(shí)現(xiàn)了一個字符棧。程序思路是:首先定義一個字符棧的接口 CharStackInter

20、face ,定義了棧的空間容量, 規(guī)定棧所包含的方法, 然后定義棧類 CharStack , 該類實(shí)現(xiàn)了字符棧的接口,最后編寫測試類 StackDemo進(jìn)行測試。請根據(jù)編程思路實(shí)現(xiàn)字符 棧的接口 CharStackInterface ,并調(diào)試程序正確運(yùn)行,寫出程序執(zhí)行結(jié)果。 interface CharStackinterface /需要實(shí)現(xiàn)的字符棧接口 class CharStack implements CharStackinterface char data; int top; CharStack() data=new charmaxsize; public void initStack

21、() top=-1; public boolean push(char x) if(!full() data+top=x; return true ; else return false; public char pop() if(!empty() top-; return datatop+1; else return 0; public boolean empty() return top=-1; public boolean full() return top= maxsize-1; public class StcckDemo public static void main(String

22、 args) CharStack s=new CharStack(); s.i nitStack(); s.push(A); s.push(B); System.out.pri ntl n( s.pop(); System.out.pri ntl n( s.pop(); 字符棧的接口 CharStackI nterface 程序的執(zhí)行結(jié)果: 四、上機(jī)實(shí)踐 ,寫出程 1.編寫程序:在圓類的基礎(chǔ)上派生出了圓錐類,按照注釋填空,并調(diào)試執(zhí)行成功 序的執(zhí)行結(jié)果。 class Circle double r ; Circle( ) (1) /無參構(gòu)造方法,默認(rèn)半徑為 1.0 Circle( double

23、a) /有參構(gòu)造方法 (2) double Area( ) (3) / 返回面積 double Girth( ) (4) / 返回周長 class Cone exte nds Circle double h; Con e() super (); h=1.0; Con e(double rr,double hh) (5)/為半徑和高賦值 double V() (6) /返回圓錐的體積 public class ConeTest public static void main(String args) Cone c1= new Con e(); System.out.pri ntln (c1.V(

24、); Cone c2=new Con e(1.0,3.0); System.out.pri ntln (c2.V(); 按照注釋的填空: (1)r=1.0 (2) this.a=a; (3) return Area (4) return Girth (5) rr=r; hh=h; (6) return V 程序的執(zhí)行結(jié)果: cl.冗/3 c2. n 2.下面程序?qū)崿F(xiàn)了抽象類的繼承和接口的實(shí)現(xiàn),同時還體現(xiàn)了接口的回調(diào)和向上轉(zhuǎn)型, 請調(diào)試該程序,根據(jù)注釋填空,并寫出程序執(zhí)行結(jié)果。 abstract class Person public abstractvoid Eat(); public abs

25、tractvoid Sleep(); in terfaceFather public void Smoking(); public void GoFishing(); in terfaceMon public void WatchTV(); public void Cook(); class Me _/ ( 1)繼承 Person 類,實(shí)現(xiàn) Father 和 Mor接口 public void Eat() System. out.println(”我喜歡吃魚香茄子); public void Sleep() System. out.println(”我喜歡睡覺時做夢”); public voi

26、d Smoking() System. out.println(我不喜歡抽煙); public void GoFishing() System. out.println(我喜歡釣魚); public void WatchTV() System. out.println(”我喜歡看電視); public void Cook() System. out.println(”我不太會做菜); public class Test3 public static void main(String args) 12 / 14 2016級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) Pers o

27、n pl = new Me(); p1.Eat(); / Mon m1 = (Mon )p1; / m1.Cook(); (2)調(diào)用p1的Sleep()方法 (3)調(diào)用m啲 WatchTV()方法 13 / 14 根據(jù)注釋填空: (1) exte nds Pers on impleme nts Father,M on (2) p1.Sleep (3) m1.Cook 程序執(zhí)行結(jié)果: 我喜歡吃魚香茄子 我喜歡睡覺時做夢 媽媽喜歡看電視 媽媽不太會做菜 3. 將程序上機(jī)調(diào)試成功,并寫出程序執(zhí)行結(jié)果。 import java.util.*; in terface In strume nt5 int

28、i = 5; void play(); Stri ng what(); void adjust(); class Wind5 impleme nts In strume nt5 public void play() System.out.pri ntln (Wi nd5.play(); 2016級java語言實(shí)驗(yàn)3指導(dǎo)(面向?qū)ο蟪绦蛟O(shè)計(繼承、封裝、多態(tài)) public String what() return Wind5; public void adjust() class Percussion5 implements Instrument5 public void play() System.out

溫馨提示

  • 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

提交評論