爲繼承設計類並提供文檔說明,不然就禁止繼承(17)

一、類必須有文檔說明類可覆蓋方法的自用性安全

  • 可覆蓋方法指,非final 的 公有和受保護方法

二、好的API 文檔應該描述作了什麼工做,而不是怎麼作的ide

三、爲繼承而設計的類函數

  • 類必須以某種形式提供適當的鉤子,以便能進入到他的工做流程中
  • 能夠是受保護的方法或受保護的域(比較少見)

四、儘量少的暴露受保護的域測試

  • 每一個受保護的方法或域都表明了一個實現細節
  • 不能漏掉該暴露的成員,而致使類不能被真正繼承

五、對於爲繼承而設計的類,惟一的測試方法就是編寫子類設計

  • 若是多個子類無一使用受保護域,就該變成私有

六、爲了繼承而設計的類可能獲得普遍應用對象

  • 受保護方法和域所隱含的實現策略,文檔中說明的自用模式,是不能修改的永久承諾

七、爲了容許繼承,類須要遵照的約束繼承

  • 構造器決不能調用可被覆蓋的方法(不管直接調用、間接調用)

  • 在子類中對final 域賦值

  • 執行結果
  • 說明這裏執行父類構造函數時,已經調用的子類overrideMe 方法

八、爲了繼承而設計的類,實現Cloneable 和Serializable 哪一個接口都很差接口

  • clone 和 readObject 方法行爲上很是像構造方法,所以不要使用可覆蓋方法
  • 上述可覆蓋方法 均可能在對象構造前被調用

九、對於並不是爲了安全的子類化的類,禁止子類化文檔

  • 類設置爲 final
  • 構造器設置爲 private 或包級私有,增長公有靜態工廠替代構造器
  • 若是類實現了反應其本質的接口,禁止子類是值得的
  • 包裝類也可進行擴展,繼承不是惟一路徑
  • 若是非要繼承,合理的辦法是:永遠不要調用它的任何可覆蓋方法

十、能夠講可覆蓋方法的代碼放到私有輔助方法中,在可覆蓋方法中調用私有輔助方法工作流

  • 靈活
相關文章
相關標籤/搜索