版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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巢狀類別的宣告,如下所示:class Order / Order外層類別 class OrderStatus
2、 / OrderStatus內層類別 Order類別擁有成員類別OrderStatus的內層類別,Order是巢狀類別的外層類別(Enclosing Class)。410-1-1 巢狀類別-UML類別圖UML類別圖的組成關係是一種成品和零件(Whole-Part)的類別關係,強調是成品的專屬零件,如下圖所示:510-1-1 巢狀類別-特點巢狀類別強調類別間的關係。例如:訂單擁有訂單狀態,所以OrderStatus類別是Order類別的一部分。巢狀類別的內層類別也是外層類別的成員,所以其他成員可以存取或呼叫內層類別的成員變數和方法,就算宣告成private也一樣可以;反之,內層類別的方法也可以直
3、接存取其他成員變數和呼叫成員方法。在Java程式檔案只允許一個宣告成public的類別,如果巢狀類別宣告成public,內層類別也一樣是public的存取權限,可以讓同一個程式檔案的多個類別擁有public存取權限。610-1-2 內層類別的使用-說明巢狀類別的內層類別是外層類別的零件,是其一部分,所以不能宣告static靜態的類別變數和方法,而且只有在外層類別的物件存在時,內層類別才會存在。在第10-1-1節的程式範例是使用外層類別的物件變數來取得內層類別的物件,在這一節我們直接在主程式的程式碼建立內層類別的物件和指定成員變數值,以便說明內層類別專屬零件的角色。710-1-2 內層類別的使用
4、-類別範例例如:Payment巢狀類別宣告,如下所示:class Payment / Payment外層類別 class Card / Card內層類別 Payment類別是外層類別,Card類別是內層類別。810-1-2 內層類別的使用-建立巢狀類別的物件在程式碼先使用new運算子建立p1參考的Payment物件,接著使用Payment.Card宣告物件變數master,如下所示:Payment p1=new Payment(pay002,5600.0);Payment.Card master = p1.new Card();然後使用p1.new建立Card物件,最後指定內層類別物件的成員變
5、數值,如下所示:master.type = MASTER;master.number = 2433-4444-7890-1234;910-2 類別的聚合關係10-2-1 一對一的聚合關係10-2-2 一對多的聚合關係10-2-3 遞迴的聚合關係1010-2 類別的聚合關係在Java程式實作聚合關係和結合關係相同,其差異在於聚合關係的兩個類別擁有成品和零件(Whole-Part)的類別關係,並不是地位對等的兩個類別。聚合關係和上一節組成關係的差異,在於組成關係的零件是專屬零件,所以組成關係的零件並不能單獨存在。聚合關係的零件可以共用,而且零件的物件可以單獨存在。1110-2-1 一對一的聚合關係
6、-說明與UML類別圖一對一的聚合關係是指類別中擁有一個物件變數參考到其他類別的物件,此類別是成品(Whole),其他類別是零件(Part)。例如:Student類別擁有Date類別的生日,生日是學生的零件。UML類別圖,如下圖所示:1210-2-1 一對一的聚合關係-類別宣告Java程式碼也是使用物件變數參考其他物件,其類別宣告如下所示:class Student private Date birthday; class Date private Student student; 1310-2-1 一對一的聚合關係-Student()建構子在Student()建構子使用new運算子來建立Dat
7、e物件,如下所示:birthday = new Date(d, m, y, this);上述建構子的最後1個參數是指定Date物件的student物件變數值是目前的Student物件。1410-2-2 一對多的聚合關係-說明與UML類別圖一對多的聚合關係是指1個類別對多個類別,也就是成品需要同樣的多個零件。例如:一輛車有4個輪胎,Student學生擁有住家電話、宿舍電話和手機等多個Phone電話物件。UML類別圖,如下圖所示:1510-2-2 一對多的聚合關係-類別宣告筆者是使用物件陣列來實作一對多的聚合關係,如下所示:class Student private int pos = 0; pr
8、ivate Phone itsPhone = new Phone3; class Phone 1610-2-3 遞迴的聚合關係-說明遞迴結合關係(Self-associations)可以使用在結合、組成或聚合關係,它是指類別擁有參考到自已的指標,以聚合關係來說,類別本身是成品;也是零件。1710-2-3 遞迴的聚合關係-UML類別圖例如:學校的科系Department類別可以分成很多子科系,每一個子科系物件也是一種Department類別。UML類別圖如下圖所示:1810-2-3 遞迴的聚合關係-類別宣告我們一樣是使用物件陣列來建立一對多的遞迴聚合關係,如下所示:class Departmen
9、t private int pos; private Department itsSub= new Department2; 1910-2-3 遞迴的聚合關係-UML物件圖2010-3 抽象類別-說明在Java類別宣告使用abstract修飾子,表示是一個抽象類別(Abstract Class),抽象類別並不能建立物件,只能被繼承用來建立子類別。在抽象類別宣告也可以使用abstract宣告方法為抽象方法,表示方法只有原型宣告,實作的程式碼是在子類別建立,而且繼承的類別一定要實作抽象方法。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 抽象類別-抽象類別的物件變數宣告抽象類別不能建立物件,但是可以作為資料型態,宣告參考子類別的物件變數,如下所示:Account s2 = new SavingAccount( 002-10-333
12、-123, 15000.00, 0.02, false);父類別的物件變數可以參考子類別的物件,以口語來說:SavingAccount物件也是一種Account物件。Account物件變數可以參考SavingAccount物件呼叫實作的抽象方法calInterest(),如下所示:s2.calInterest();2510-3 抽象類別-抽象類別的物件變數存取子類別的成員Java提供instanceof運算子判斷物件變數參考的哪一種物件,如下所示:if ( s2 instanceof SavingAccount ) . Account類別的物件變數s2儲存的是SavingAccount物件的參
13、考,如果需要存取子類別的成員,請先型態轉換成SavingAccount類別的物件變數,如下所示:SavingAccount s;s = (SavingAccount) s2;2610-4 抽象類別與介面-抽象類別與介面的差異在抽象類別的方法可以宣告成抽象方法,也可以是一般方法;介面方法就只有宣告,在介面一定不會有實作程式碼。介面並不屬於類別的繼承架構;抽象類別則屬於類別的繼承架構。抽象類別一定是繼承架構的父類別,但是,就算亳無關係的類別也一樣可以實作同一個介面。一個類別只能繼承一個抽象類別,但是可以同時實作多個介面。2710-4 抽象類別與介面-抽象類別Java語言的類別可以繼承抽象類別且實作
14、介面。例如:圖形的Shape抽象類別,其類別宣告如下所示: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 public void area() System.out
15、.println(長方形面積:“ +width*height); public void perimeter() System.out.println(長方形周長:“ +2*(width+height); 3010-4 抽象類別與介面-UML類別圖3110-4 抽象類別與介面-介面的物件變數1我們一樣可以使用介面來宣告物件變數,參考到實作此介面的物件,如下所示:IPerimeter r3 = new Rectangle(15.0,15.0,4.0,8.0);以口語來說:Rectangle物件就是一種實作IPerimeter介面的物件。因為IPerimeter宣告的物件變數可以參考Rectang
16、le物件,所以,可以呼叫實作的介面方法perimeter(),如下所示:r3.perimeter();3210-4 抽象類別與介面-介面的物件變數2如同抽象類別宣告的物件變數,當介面宣告的物件變數需要存取其參考類別的成員時,我們需要先型態轉換成Rectangle類別的物件變數,如下所示:Rectangle r;r = (Rectangle) r3;3310-5 常數類別-說明Java類別除了可以使用public和abstract類別修飾子外,還提供final修飾子來宣告常數類別與常數方法。如果類別宣告成final表示類別不能被繼承;如果方法宣告成final表示此方法不可以覆寫。3410-5 常數類別-使用final修飾子的理由保密原因:基於保密理由,可以將一些類別宣告成final,以防止子類別存取或覆寫原類別的操作。設計原因:基於物件導向設計的需求,我們可以將某些類別宣告成final,以避免子類別繼承。3510-5 常數類別-常數類別與方法的範例fina
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五一座谈会方案
- 基于流形拟合的对抗性防御算法研究
- 2025年六安b2货运资格证考试题库
- 大气湍流与水下环境下单像素成像研究
- 影视导演艺术与音像制品制作考核试卷
- 2025年外研版三年级起点九年级生物上册月考试卷含答案
- 2025年人教版八年级地理上册阶段测试试卷
- 智能交通资源共享合同(2篇)
- 智慧城市平台合作开发合同(2篇)
- 服务申请高新企业保密协议书(2篇)
- 安踏运动品牌营销策略研究
- 非哺乳期乳腺炎患者的护理
- 淋巴瘤的治疗及护理
- 骨科抗菌药物应用分析报告
- 中职安全管理方案
- 百词斩托福词汇excel版本
- 高考写作指导常见议论文论证方法知识梳理与举例解析课件27张
- 玻璃反应釜安全操作及保养规程
- 高中英语新课标词汇表(附词组)
- 证券公司信用风险和操作风险管理理论和实践中金公司
- 2022年高考湖南卷生物试题(含答案解析)
评论
0/150
提交评论