一、類必須有文檔說明類可覆蓋方法的自用性安全
二、好的API 文檔應該描述作了什麼工做,而不是怎麼作的ide
三、爲繼承而設計的類函數
- 類必須以某種形式提供適當的鉤子,以便能進入到他的工做流程中
- 能夠是受保護的方法或受保護的域(比較少見)
四、儘量少的暴露受保護的域測試
- 每一個受保護的方法或域都表明了一個實現細節
- 不能漏掉該暴露的成員,而致使類不能被真正繼承
五、對於爲繼承而設計的類,惟一的測試方法就是編寫子類設計
六、爲了繼承而設計的類可能獲得普遍應用對象
- 受保護方法和域所隱含的實現策略,文檔中說明的自用模式,是不能修改的永久承諾
七、爲了容許繼承,類須要遵照的約束繼承
- 構造器決不能調用可被覆蓋的方法(不管直接調用、間接調用)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
- 執行結果
- 說明這裏執行父類構造函數時,已經調用的子類overrideMe 方法
![](http://static.javashuo.com/static/loading.gif)
八、爲了繼承而設計的類,實現Cloneable 和Serializable 哪一個接口都很差接口
- clone 和 readObject 方法行爲上很是像構造方法,所以不要使用可覆蓋方法
- 上述可覆蓋方法 均可能在對象構造前被調用
九、對於並不是爲了安全的子類化的類,禁止子類化文檔
- 類設置爲 final
- 構造器設置爲 private 或包級私有,增長公有靜態工廠替代構造器
- 若是類實現了反應其本質的接口,禁止子類是值得的
- 包裝類也可進行擴展,繼承不是惟一路徑
- 若是非要繼承,合理的辦法是:永遠不要調用它的任何可覆蓋方法
十、能夠講可覆蓋方法的代碼放到私有輔助方法中,在可覆蓋方法中調用私有輔助方法工作流