1. 繼承
繼承是指一個(gè)類(稱為子類仓技、子接口)繼承令一個(gè)類(稱為父類俗他、付接口)的功能
- 子類具有可以增加它自己的新功能的能力
- 在Java中此類關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)志
- 且子類只能繼承一個(gè)父類阔逼,單繼承
- 包括類繼承和接口繼承兩種,如下圖嗜浮,左側(cè)是類繼承,右側(cè)是接口繼承
image
2. 實(shí)現(xiàn)
實(shí)現(xiàn)是指一個(gè)class類實(shí)現(xiàn)了interface接口
- 實(shí)現(xiàn)的接口可以是多個(gè)
- 在 Java 中此類關(guān)系通過(guò)implements 關(guān)鍵字標(biāo)志
- 接口可以從行為方面考慮危融,多個(gè)類具有相同的行為
image
3. 依賴
依賴簡(jiǎn)單理解,就是一個(gè)類 A 使用到了另一個(gè)類 B
- 此種依賴關(guān)系具有偶然性額吉殃、臨時(shí)性的、非常弱的
- 但是 B 類的變化會(huì)影響到 A
- 代碼層的表現(xiàn)是蛋勺,類 B 作為方法參數(shù)被 A 的某個(gè)方法使用
image
4. 關(guān)聯(lián)
關(guān)聯(lián)是兩個(gè)類、或者類與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系
- 這種關(guān)系比依賴更強(qiáng)
- 這種關(guān)系不是偶然性抱完、也不是臨時(shí)的,一般是長(zhǎng)期巧娱、平等的
- 代碼層面表現(xiàn)為,類B 作為屬性形式出現(xiàn)在類A中
- 成員變量
- 類變量
image
5. 聚合
聚合是關(guān)聯(lián)關(guān)系的一種特例
- 它體現(xiàn)的是整體與部分禁添、has-a的關(guān)系
- 整體和部分之間是可分離的,而且具有各自的生命周期
- 部分可以屬于多個(gè)整體對(duì)象上荡,即部分可以“拆卸”存在其他整體對(duì)象中馒闷,也可為多個(gè)整體對(duì)象共享
- 如計(jì)算機(jī)和CPU,公司和員工
- 代碼層面表現(xiàn)為叁征,類B 作為屬性形式出現(xiàn)在類A中
- 成員變量
- 類變量
image
6. 組合
組合也是關(guān)聯(lián)關(guān)系的一種特例
- 它體現(xiàn)的是contains-a的關(guān)系
- 此種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合
- 體現(xiàn)整體和部分間的關(guān)系疏虫,但整體和部分不可分,整體聲明周期決定著部分的生命周期
- 比如人體和到腦
- 代碼層面表現(xiàn)為啤呼,類B 作為屬性形式出現(xiàn)在類A中
- 成員變量
- 類變量
- 代碼層面表現(xiàn)為啤呼,類B 作為屬性形式出現(xiàn)在類A中
image
關(guān)系依賴強(qiáng)弱排序
組合>聚合>關(guān)聯(lián)>依賴
組合和聚合的區(qū)別
- 3種對(duì)象:雁群(GooseGroup)-大雁(Goose)-翅膀(Wings)
- 聚合:雁群-大雁 (has-a, 生命周期獨(dú)立)
- 組合:大雁-翅膀 (contain-a, 生命周期不獨(dú)立)
代碼層面上組合和聚合的對(duì)比
信息的封裝性不同
GooseGroup 和 Goose
public class GooseGroup {
private Goose goose;
public GooseGroup(Goose goose) {
//GooseGroup 和 Goose有獨(dú)立的生命周期,Goose 可對(duì)外暴露-聚合
//客戶端可以同時(shí)了解 GooseGroup 和 Goose
this.goose = goose;
}
}
Goose 和 Wings
public class Goose {
private Wings wings;
public Goose() {
//Goose 負(fù)責(zé)Wings 的生命周期-組合
//客戶端只認(rèn)識(shí)Goose類翅敌,根本不知道Wings的存在,Winds 完全被封裝到Goose中
wings = new Wings();
}
}