聚合关系与抽象类别

上传人:新** 文档编号:569487976 上传时间:2024-07-29 格式:PPT 页数:38 大小:302KB
返回 下载 相关 举报
聚合关系与抽象类别_第1页
第1页 / 共38页
聚合关系与抽象类别_第2页
第2页 / 共38页
聚合关系与抽象类别_第3页
第3页 / 共38页
聚合关系与抽象类别_第4页
第4页 / 共38页
聚合关系与抽象类别_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《聚合关系与抽象类别》由会员分享,可在线阅读,更多相关《聚合关系与抽象类别(38页珍藏版)》请在金锄头文库上搜索。

1、第第10章章 組成、聚合關係與抽象類別組成、聚合關係與抽象類別10-1 類別的組成關係 - 巢狀類別10-2 類別的聚合關係10-3 抽象類別10-4 抽象類別與介面10-5 常數類別110-1 類別的組成關係類別的組成關係 - 巢狀類別巢狀類別10-1-1 巢狀類別10-1-2 內層類別的使用210-1-1 巢狀類別巢狀類別-說明說明巢狀類別強調類別間的關聯性,強調內層類別一定需要外層類別,如果外層類別的物件不存在,內層類別物件也不會存在,內層的成員類別稱為內層類別(Inner Classes)。310-1-1 巢狀類別巢狀類別-巢狀類別的宣告巢狀類別的宣告Order巢狀類別的宣告,如下所示

2、:class Order / Orderclass Order / Order外層類別外層類別 class OrderStatus / OrderStatus class OrderStatus / OrderStatus內層類別內層類別 Order類別擁有成員類別OrderStatus的內層類別,Order是巢狀類別的外層類別(Enclosing Class)。410-1-1 巢狀類別巢狀類別-UML類別圖類別圖UML類別圖的組成關係是一種成品和零件(Whole-Part)的類別關係,強調是成品的專屬零件,如下圖所示:510-1-1 巢狀類別巢狀類別-特點特點巢狀類別強調類別間的關係。例如:

3、訂單擁有訂巢狀類別強調類別間的關係。例如:訂單擁有訂單狀態,所以單狀態,所以OrderStatusOrderStatus類別是類別是OrderOrder類別的一部類別的一部分。分。巢狀類別的內層類別也是外層類別的成員,所以巢狀類別的內層類別也是外層類別的成員,所以其他成員可以存取或呼叫內層類別的成員變數和其他成員可以存取或呼叫內層類別的成員變數和方法,就算宣告成方法,就算宣告成privateprivate也一樣可以;反之,內也一樣可以;反之,內層類別的方法也可以直接存取其他成員變數和呼層類別的方法也可以直接存取其他成員變數和呼叫成員方法。叫成員方法。在在JavaJava程式檔案只允許一個宣告成

4、程式檔案只允許一個宣告成publicpublic的類別,的類別,如果巢狀類別宣告成如果巢狀類別宣告成publicpublic,內層類別也一樣是,內層類別也一樣是publicpublic的存取權限,可以讓同一個程式檔案的多個的存取權限,可以讓同一個程式檔案的多個類別擁有類別擁有publicpublic存取權限。存取權限。610-1-2 內層類別的使用內層類別的使用-說明說明巢狀類別的內層類別是外層類別的零件,是其一部分,所以不能宣告static靜態的類別變數和方法,而且只有在外層類別的物件存在時,內層類別才會存在。在第10-1-1節的程式範例是使用外層類別的物件變數來取得內層類別的物件,在這一節

5、我們直接在主程式的程式碼建立內層類別的物件和指定成員變數值,以便說明內層類別專屬零件的角色。710-1-2 內層類別的使用內層類別的使用-類別範例類別範例例如:Payment巢狀類別宣告,如下所示:class Payment / Paymentclass Payment / Payment外層類別外層類別 class Card / Card class Card / Card內層類別內層類別 Payment類別是外層類別,Card類別是內層類別。810-1-2 內層類別的使用內層類別的使用-建立巢狀類建立巢狀類別的物件別的物件在程式碼先使用在程式碼先使用newnew運算子建立運算子建立p1p1

6、參考的參考的PaymentPayment物件,接著使用物件,接著使用Payment.CardPayment.Card宣告物件變數宣告物件變數mastermaster,如下所示:,如下所示:Payment p1=new Payment p1=new Payment(pay002,5600.0); Payment(pay002,5600.0);Payment.Card master = p1.new Card();Payment.Card master = p1.new Card();然後使用然後使用p1.newp1.new建立建立CardCard物件,最後指定內層類物件,最後指定內層類別物件的成

7、員變數值,如下所示:別物件的成員變數值,如下所示:master.type = MASTER;master.type = MASTER;master.number = 2433-4444-7890-1234;master.number = 2433-4444-7890-1234;910-2 類別的聚合關係類別的聚合關係10-2-1 一對一的聚合關係10-2-2 一對多的聚合關係10-2-3 遞迴的聚合關係1010-2 類別的聚合關係類別的聚合關係在Java程式實作聚合關係和結合關係相同,其差異在於聚合關係的兩個類別擁有成品和零件(Whole-Part)的類別關係,並不是地位對等的兩個類別。聚合關

8、係和上一節組成關係的差異,在於組成關係的零件是專屬零件,所以組成關係的零件並不能單獨存在。聚合關係的零件可以共用,而且零件的物件可以單獨存在。1110-2-1 一對一的聚合關係一對一的聚合關係-說明與說明與UML類別圖類別圖一對一的聚合關係是指類別中擁有一個物件變數一對一的聚合關係是指類別中擁有一個物件變數參考到其他類別的物件,此類別是成品(參考到其他類別的物件,此類別是成品(WholeWhole),),其他類別是零件(其他類別是零件(PartPart)。)。例如:例如:StudentStudent類別擁有類別擁有DateDate類別的生日,生日是類別的生日,生日是學生的零件。學生的零件。UM

9、LUML類別圖,如下圖所示:類別圖,如下圖所示:1210-2-1 一對一的聚合關係一對一的聚合關係-類別宣告類別宣告Java程式碼也是使用物件變數參考其他物件,其類別宣告如下所示:class Student class Student private Date birthday; private Date birthday; class Date class Date private Student student; private Student student; 1310-2-1 一對一的聚合關係一對一的聚合關係-Student()建構子建構子在Student()建構子使用new運算子來建

10、立Date物件,如下所示:birthday = new Date(d, m, y, this);birthday = new Date(d, m, y, this);上述建構子的最後1個參數是指定Date物件的student物件變數值是目前的Student物件。1410-2-2 一對多的聚合關係一對多的聚合關係-說明與說明與UML類別圖類別圖一對多的聚合關係是指1個類別對多個類別,也就是成品需要同樣的多個零件。例如:一輛車有4個輪胎,Student學生擁有住家電話、宿舍電話和手機等多個Phone電話物件。UML類別圖,如下圖所示:1510-2-2 一對多的聚合關係一對多的聚合關係-類別宣告類別

11、宣告筆者是使用物件陣列來實作一對多的聚合關係,如下所示:class Student class Student private int pos = 0; private int pos = 0; private Phone itsPhone = new Phone3; private Phone itsPhone = new Phone3; class Phone class Phone 1610-2-3 遞迴的聚合關係遞迴的聚合關係-說明說明遞迴結合關係(Self-associations)可以使用在結合、組成或聚合關係,它是指類別擁有參考到自已的指標,以聚合關係來說,類別本身是成品;也是零

12、件。1710-2-3 遞迴的聚合關係遞迴的聚合關係-UML類別圖類別圖例如:學校的科系Department類別可以分成很多子科系,每一個子科系物件也是一種Department類別。UML類別圖如下圖所示:1810-2-3 遞迴的聚合關係遞迴的聚合關係-類別宣告類別宣告我們一樣是使用物件陣列來建立一對多的遞迴聚合關係,如下所示:class Department class Department private int pos; private int pos; private Department itsSub= private Department itsSub= new Department

13、2; new Department2; 1910-2-3 遞迴的聚合關係遞迴的聚合關係-UML物件物件圖圖2010-3 抽象類別抽象類別-說明說明在Java類別宣告使用abstract修飾子,表示是一個抽象類別(Abstract Class),抽象類別並不能建立物件,只能被繼承用來建立子類別。在抽象類別宣告也可以使用abstract宣告方法為抽象方法,表示方法只有原型宣告,實作的程式碼是在子類別建立,而且繼承的類別一定要實作抽象方法。2110-3 抽象類別抽象類別-宣告抽象類別宣告抽象類別抽象類別是建立子類別的原型,抽象方法類似介抽象類別是建立子類別的原型,抽象方法類似介面,可以視為建立子類別

14、的介面方法。例如:抽面,可以視為建立子類別的介面方法。例如:抽象類別象類別AccountAccount宣告,如下所示:宣告,如下所示:abstract class Account abstract class Account public String accountid; public String accountid; private double amount; private double amount; public double interest; public double interest; public abstract void calInterest(); public

15、abstract void calInterest(); public void setBalance(double a) public void setBalance(double a) public double getBalance() public double getBalance() 2210-3 抽象類別抽象類別-繼承抽象類別繼承抽象類別class SavingAccount extends Account class SavingAccount extends Account public boolean haveCard; public boolean haveCard; p

16、ublic SavingAccount(String id, public SavingAccount(String id, double amount, double interest, double amount, double interest, boolean haveCard) boolean haveCard) public void calInterest() public void calInterest() double amount = getBalance(); double amount = getBalance(); System.out.println( Syste

17、m.out.println(利息利息: “: “ +(amount*interest); +(amount*interest); 2310-3 抽象類別抽象類別-UML類別圖類別圖2410-3 抽象類別抽象類別-抽象類別的物件變數抽象類別的物件變數宣告宣告抽象類別不能建立物件,但是可以作為資料型態,抽象類別不能建立物件,但是可以作為資料型態,宣告參考子類別的物件變數,如下所示:宣告參考子類別的物件變數,如下所示:Account s2 = new SavingAccount(Account s2 = new SavingAccount( 002-10-333-123, 002-10-333-12

18、3, 15000.00, 0.02, false); 15000.00, 0.02, false);父類別的物件變數可以參考子類別的物件,以口父類別的物件變數可以參考子類別的物件,以口語來說:語來說:SavingAccountSavingAccount物件也是一種物件也是一種AccountAccount物物件。件。AccountAccount物件變數可以參考物件變數可以參考SavingAccountSavingAccount物物件呼叫實作的抽象方法件呼叫實作的抽象方法calInterest()calInterest(),如下所示:,如下所示:s2.calInterest();s2.calInt

19、erest();2510-3 抽象類別抽象類別-抽象類別的物件變數抽象類別的物件變數存取子類別的成員存取子類別的成員Java提供instanceof運算子判斷物件變數參考的哪一種物件,如下所示:if ( s2 instanceof SavingAccount ) . if ( s2 instanceof SavingAccount ) . Account類別的物件變數s2儲存的是SavingAccount物件的參考,如果需要存取子類別的成員,請先型態轉換成SavingAccount類別的物件變數,如下所示:SavingAccount s;SavingAccount s;s = (SavingA

20、ccount) s2;s = (SavingAccount) s2;2610-4 抽象類別與介面抽象類別與介面-抽象類別與介抽象類別與介面的差異面的差異在抽象類別的方法可以宣告成抽象方法,也可以是一般方法;介面方法就只有宣告,在介面一定不會有實作程式碼。介面並不屬於類別的繼承架構;抽象類別則屬於類別的繼承架構。抽象類別一定是繼承架構的父類別,但是,就算亳無關係的類別也一樣可以實作同一個介面。一個類別只能繼承一個抽象類別,但是可以同時實作多個介面。2710-4 抽象類別與介面抽象類別與介面-抽象類別抽象類別Java語言的類別可以繼承抽象類別且實作介面。例如:圖形的Shape抽象類別,其類別宣告如

21、下所示:abstract class Shape public double x; public double y; public abstract void area();2810-4 抽象類別與介面抽象類別與介面-介面介面例如:IPerimeter介面,其介面宣告如下所示:interface IPerimeter void perimeter();2910-4 抽象類別與介面抽象類別與介面-繼承抽象類別繼承抽象類別且實作介面且實作介面class Rectangle extends Shape implements IPerimeter class Rectangle extends Sha

22、pe implements IPerimeter public void area() public void area() System.out.println( System.out.println(長方形面積長方形面積:“ :“ +width*height); +width*height); public void perimeter() public void perimeter() System.out.println( System.out.println(長方形周長長方形周長:“ :“ +2*(width+height); +2*(width+height); 3010-4 抽象

23、類別與介面抽象類別與介面-UML類別圖類別圖3110-4 抽象類別與介面抽象類別與介面-介面的物件變介面的物件變數數1我們一樣可以使用介面來宣告物件變數,參考到實作此介面的物件,如下所示:IPerimeter r3 = new Rectangle(15.0,15.0,4.0,8.0);以口語來說:Rectangle物件就是一種實作IPerimeter介面的物件。因為IPerimeter宣告的物件變數可以參考Rectangle物件,所以,可以呼叫實作的介面方法perimeter(),如下所示:r3.perimeter();3210-4 抽象類別與介面抽象類別與介面-介面的物件變介面的物件變數數2

24、如同抽象類別宣告的物件變數,當介面宣告的物件變數需要存取其參考類別的成員時,我們需要先型態轉換成Rectangle類別的物件變數,如下所示:Rectangle r;Rectangle r;r = (Rectangle) r3;r = (Rectangle) r3;3310-5 常數類別常數類別-說明說明Java類別除了可以使用public和abstract類別修飾子外,還提供final修飾子來宣告常數類別與常數方法。如果類別宣告成final表示類別不能被繼承;如果方法宣告成final表示此方法不可以覆寫。3410-5 常數類別常數類別-使用使用final修飾子的理修飾子的理由由保密原因:保密原

25、因:基於保密理由,可以將一些類別宣告成final,以防止子類別存取或覆寫原類別的操作。設計原因:設計原因:基於物件導向設計的需求,我們可以將某些類別宣告成final,以避免子類別繼承。3510-5 常數類別常數類別-常數類別與方法的範常數類別與方法的範例例final class Customer extends Person final class Customer extends Person class Person class Person public final String getName() public final String getName() return name; r

26、eturn name; public final String getAddress() public final String getAddress() return address; return address; public final void setName(String n) name = n; public final void setName(String n) name = n; public final void setAddress(String a) address = a; public final void setAddress(String a) address = a; 3610-5 常數類別常數類別-UML類別圖類別圖3738

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号