第6章 專題:抽象類
6.1 what?
抽象類僅提供一個類型的部分實現。抽象類可以有實例變量,以及一個或多個構造子。抽象類可以同時有抽象方法和具體方法。
一個抽象類不會有實例,這些構造子不能被客戶端調用來創建實例。一個抽象類的構造子可以被其子類調用,從而使一個抽象類的所有子類都可以有一些共有的實現,而不同的子類可以在此基礎上有其自己的實現。

6.2 用途
抽象類通常代表一個抽象概念,它提供一個繼承的出發點。

具體類不是用來繼承的

抽象類應當擁有盡可能多的共同代碼
在一個從抽象類到多個具體類的繼承關系中,共同的代碼應當盡量移動到抽象類里。
策略模式

抽象類應當擁有盡可能少的數據

6.3 基于抽象類的模式和原則
1. 針對抽象編程
??? 依賴倒轉原則(DIP)
2. 正確使用繼承
??? 組合/聚合復用原則(CARP)
??? 里氏代換原則(LSP)
3. 模版方法模式

6.4 什么時候才應當使用繼承復用
1. 子類是超類的一個特殊種類,而不是超類的一個角色。
???
Has-A關系應當使用聚合關系描述,而只有Is-A關系才符合繼承關系。
2. 永遠不會出現需要將子類換成另一個類的子類的情況。
3. 子類具有擴展超類的責任,而不是具有置換掉(Override)或注銷掉(Nullify)超類的責任。
4. 只有在分類學角度上有意義時,才可以使用繼承,不要從工具類繼承。


歡迎大家訪問我的個人網站 萌萌的IT人