聚合關(guān)系與抽象類別_第1頁(yè)
聚合關(guān)系與抽象類別_第2頁(yè)
聚合關(guān)系與抽象類別_第3頁(yè)
聚合關(guān)系與抽象類別_第4頁(yè)
聚合關(guān)系與抽象類別_第5頁(yè)
已閱讀5頁(yè),還剩33頁(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、第10章 組成、聚合關(guān)係與抽象類別10-1 類別的組成關(guān)係 - 巢狀類別10-2 類別的聚合關(guān)係10-3 抽象類別10-4 抽象類別與介面10-5 常數(shù)類別110-1 類別的組成關(guān)係 - 巢狀類別10-1-1 巢狀類別10-1-2 內(nèi)層類別的使用210-1-1 巢狀類別-說(shuō)明巢狀類別強(qiáng)調(diào)類別間的關(guān)聯(lián)性,強(qiáng)調(diào)內(nèi)層類別一定需要外層類別,如果外層類別的物件不存在,內(nèi)層類別物件也不會(huì)存在,內(nèi)層的成員類別稱為內(nèi)層類別(Inner Classes)。310-1-1 巢狀類別-巢狀類別的宣告Order巢狀類別的宣告,如下所示:class Order / Order外層類別 class OrderStatus

2、 / OrderStatus內(nèi)層類別 Order類別擁有成員類別OrderStatus的內(nèi)層類別,Order是巢狀類別的外層類別(Enclosing Class)。410-1-1 巢狀類別-UML類別圖UML類別圖的組成關(guān)係是一種成品和零件(Whole-Part)的類別關(guān)係,強(qiáng)調(diào)是成品的專屬零件,如下圖所示:510-1-1 巢狀類別-特點(diǎn)巢狀類別強(qiáng)調(diào)類別間的關(guān)係。例如:訂單擁有訂單狀態(tài),所以O(shè)rderStatus類別是Order類別的一部分。巢狀類別的內(nèi)層類別也是外層類別的成員,所以其他成員可以存取或呼叫內(nèi)層類別的成員變數(shù)和方法,就算宣告成private也一樣可以;反之,內(nèi)層類別的方法也可以直

3、接存取其他成員變數(shù)和呼叫成員方法。在Java程式檔案只允許一個(gè)宣告成public的類別,如果巢狀類別宣告成public,內(nèi)層類別也一樣是public的存取權(quán)限,可以讓同一個(gè)程式檔案的多個(gè)類別擁有public存取權(quán)限。610-1-2 內(nèi)層類別的使用-說(shuō)明巢狀類別的內(nèi)層類別是外層類別的零件,是其一部分,所以不能宣告static靜態(tài)的類別變數(shù)和方法,而且只有在外層類別的物件存在時(shí),內(nèi)層類別才會(huì)存在。在第10-1-1節(jié)的程式範(fàn)例是使用外層類別的物件變數(shù)來(lái)取得內(nèi)層類別的物件,在這一節(jié)我們直接在主程式的程式碼建立內(nèi)層類別的物件和指定成員變數(shù)值,以便說(shuō)明內(nèi)層類別專屬零件的角色。710-1-2 內(nèi)層類別的使用

4、-類別範(fàn)例例如:Payment巢狀類別宣告,如下所示:class Payment / Payment外層類別 class Card / Card內(nèi)層類別 Payment類別是外層類別,Card類別是內(nèi)層類別。810-1-2 內(nèi)層類別的使用-建立巢狀類別的物件在程式碼先使用new運(yùn)算子建立p1參考的Payment物件,接著使用Payment.Card宣告物件變數(shù)master,如下所示:Payment p1=new Payment(pay002,5600.0);Payment.Card master = p1.new Card();然後使用p1.new建立Card物件,最後指定內(nèi)層類別物件的成員變

5、數(shù)值,如下所示:master.type = MASTER;master.number = 2433-4444-7890-1234;910-2 類別的聚合關(guān)係10-2-1 一對(duì)一的聚合關(guān)係10-2-2 一對(duì)多的聚合關(guān)係10-2-3 遞迴的聚合關(guān)係1010-2 類別的聚合關(guān)係在Java程式實(shí)作聚合關(guān)係和結(jié)合關(guān)係相同,其差異在於聚合關(guān)係的兩個(gè)類別擁有成品和零件(Whole-Part)的類別關(guān)係,並不是地位對(duì)等的兩個(gè)類別。聚合關(guān)係和上一節(jié)組成關(guān)係的差異,在於組成關(guān)係的零件是專屬零件,所以組成關(guān)係的零件並不能單獨(dú)存在。聚合關(guān)係的零件可以共用,而且零件的物件可以單獨(dú)存在。1110-2-1 一對(duì)一的聚合關(guān)係

6、-說(shuō)明與UML類別圖一對(duì)一的聚合關(guān)係是指類別中擁有一個(gè)物件變數(shù)參考到其他類別的物件,此類別是成品(Whole),其他類別是零件(Part)。例如:Student類別擁有Date類別的生日,生日是學(xué)生的零件。UML類別圖,如下圖所示:1210-2-1 一對(duì)一的聚合關(guān)係-類別宣告Java程式碼也是使用物件變數(shù)參考其他物件,其類別宣告如下所示:class Student private Date birthday; class Date private Student student; 1310-2-1 一對(duì)一的聚合關(guān)係-Student()建構(gòu)子在Student()建構(gòu)子使用new運(yùn)算子來(lái)建立Dat

7、e物件,如下所示:birthday = new Date(d, m, y, this);上述建構(gòu)子的最後1個(gè)參數(shù)是指定Date物件的student物件變數(shù)值是目前的Student物件。1410-2-2 一對(duì)多的聚合關(guān)係-說(shuō)明與UML類別圖一對(duì)多的聚合關(guān)係是指1個(gè)類別對(duì)多個(gè)類別,也就是成品需要同樣的多個(gè)零件。例如:一輛車有4個(gè)輪胎,Student學(xué)生擁有住家電話、宿舍電話和手機(jī)等多個(gè)Phone電話物件。UML類別圖,如下圖所示:1510-2-2 一對(duì)多的聚合關(guān)係-類別宣告筆者是使用物件陣列來(lái)實(shí)作一對(duì)多的聚合關(guān)係,如下所示:class Student private int pos = 0; pr

8、ivate Phone itsPhone = new Phone3; class Phone 1610-2-3 遞迴的聚合關(guān)係-說(shuō)明遞迴結(jié)合關(guān)係(Self-associations)可以使用在結(jié)合、組成或聚合關(guān)係,它是指類別擁有參考到自已的指標(biāo),以聚合關(guān)係來(lái)說(shuō),類別本身是成品;也是零件。1710-2-3 遞迴的聚合關(guān)係-UML類別圖例如:學(xué)校的科系Department類別可以分成很多子科系,每一個(gè)子科系物件也是一種Department類別。UML類別圖如下圖所示:1810-2-3 遞迴的聚合關(guān)係-類別宣告我們一樣是使用物件陣列來(lái)建立一對(duì)多的遞迴聚合關(guān)係,如下所示:class Departmen

9、t private int pos; private Department itsSub= new Department2; 1910-2-3 遞迴的聚合關(guān)係-UML物件圖2010-3 抽象類別-說(shuō)明在Java類別宣告使用abstract修飾子,表示是一個(gè)抽象類別(Abstract Class),抽象類別並不能建立物件,只能被繼承用來(lái)建立子類別。在抽象類別宣告也可以使用abstract宣告方法為抽象方法,表示方法只有原型宣告,實(shí)作的程式碼是在子類別建立,而且繼承的類別一定要實(shí)作抽象方法。2110-3 抽象類別-宣告抽象類別抽象類別是建立子類別的原型,抽象方法類似介面,可以視為建立子類別的介面方

10、法。例如:抽象類別Account宣告,如下所示:abstract class Account public String accountid; private double amount; public double interest; public abstract void calInterest(); public void setBalance(double a) public double getBalance() 2210-3 抽象類別-繼承抽象類別class SavingAccount extends Account public boolean haveCard; public

11、 SavingAccount(String id, double amount, double interest, boolean haveCard) public void calInterest() double amount = getBalance(); System.out.println(利息: “ +(amount*interest); 2310-3 抽象類別-UML類別圖2410-3 抽象類別-抽象類別的物件變數(shù)宣告抽象類別不能建立物件,但是可以作為資料型態(tài),宣告參考子類別的物件變數(shù),如下所示:Account s2 = new SavingAccount( 002-10-333

12、-123, 15000.00, 0.02, false);父類別的物件變數(shù)可以參考子類別的物件,以口語(yǔ)來(lái)說(shuō):SavingAccount物件也是一種Account物件。Account物件變數(shù)可以參考SavingAccount物件呼叫實(shí)作的抽象方法calInterest(),如下所示:s2.calInterest();2510-3 抽象類別-抽象類別的物件變數(shù)存取子類別的成員Java提供instanceof運(yùn)算子判斷物件變數(shù)參考的哪一種物件,如下所示:if ( s2 instanceof SavingAccount ) . Account類別的物件變數(shù)s2儲(chǔ)存的是SavingAccount物件的參

13、考,如果需要存取子類別的成員,請(qǐng)先型態(tài)轉(zhuǎn)換成SavingAccount類別的物件變數(shù),如下所示:SavingAccount s;s = (SavingAccount) s2;2610-4 抽象類別與介面-抽象類別與介面的差異在抽象類別的方法可以宣告成抽象方法,也可以是一般方法;介面方法就只有宣告,在介面一定不會(huì)有實(shí)作程式碼。介面並不屬於類別的繼承架構(gòu);抽象類別則屬於類別的繼承架構(gòu)。抽象類別一定是繼承架構(gòu)的父類別,但是,就算亳無(wú)關(guān)係的類別也一樣可以實(shí)作同一個(gè)介面。一個(gè)類別只能繼承一個(gè)抽象類別,但是可以同時(shí)實(shí)作多個(gè)介面。2710-4 抽象類別與介面-抽象類別Java語(yǔ)言的類別可以繼承抽象類別且實(shí)作

14、介面。例如:圖形的Shape抽象類別,其類別宣告如下所示:abstract class Shape public double x; public double y; public abstract void area();2810-4 抽象類別與介面-介面例如:IPerimeter介面,其介面宣告如下所示:interface IPerimeter void perimeter();2910-4 抽象類別與介面-繼承抽象類別且實(shí)作介面class Rectangle extends Shape implements IPerimeter public void area() System.out

15、.println(長(zhǎng)方形面積:“ +width*height); public void perimeter() System.out.println(長(zhǎng)方形周長(zhǎng):“ +2*(width+height); 3010-4 抽象類別與介面-UML類別圖3110-4 抽象類別與介面-介面的物件變數(shù)1我們一樣可以使用介面來(lái)宣告物件變數(shù),參考到實(shí)作此介面的物件,如下所示:IPerimeter r3 = new Rectangle(15.0,15.0,4.0,8.0);以口語(yǔ)來(lái)說(shuō):Rectangle物件就是一種實(shí)作IPerimeter介面的物件。因?yàn)镮Perimeter宣告的物件變數(shù)可以參考Rectang

16、le物件,所以,可以呼叫實(shí)作的介面方法perimeter(),如下所示:r3.perimeter();3210-4 抽象類別與介面-介面的物件變數(shù)2如同抽象類別宣告的物件變數(shù),當(dāng)介面宣告的物件變數(shù)需要存取其參考類別的成員時(shí),我們需要先型態(tài)轉(zhuǎn)換成Rectangle類別的物件變數(shù),如下所示:Rectangle r;r = (Rectangle) r3;3310-5 常數(shù)類別-說(shuō)明Java類別除了可以使用public和abstract類別修飾子外,還提供final修飾子來(lái)宣告常數(shù)類別與常數(shù)方法。如果類別宣告成final表示類別不能被繼承;如果方法宣告成final表示此方法不可以覆寫。3410-5 常數(shù)類別-使用final修飾子的理由保密原因:基於保密理由,可以將一些類別宣告成final,以防止子類別存取或覆寫原類別的操作。設(shè)計(jì)原因:基於物件導(dǎo)向設(shè)計(jì)的需求,我們可以將某些類別宣告成final,以避免子類別繼承。3510-5 常數(shù)類別-常數(shù)類別與方法的範(fàn)例fina

溫馨提示

  • 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)論