要么為繼承而設(shè)計,并提供文檔說明,要么禁止繼承

第17條:要么為繼承而設(shè)計,并提供文檔說明,要么禁止繼承


1.如何編寫為繼承而設(shè)計的類?

(1)對于public或是protected的方法(非final)或是構(gòu)造器,在文檔中要說明它們調(diào)用了哪些自己的public或是protected類型的方法(非final),并說明調(diào)用順序,并說明每次調(diào)用的作用。
(2)文檔編寫完成,并發(fā)布新版本之后,后續(xù)的版本不能違背文檔中的細(xì)節(jié)。
(3)構(gòu)造器絕對不能調(diào)用可被覆蓋的方法。
(4)對于實現(xiàn)了Cloneable接口的類,在clone方法中不能調(diào)用可被覆蓋的方法。
(5)對于實現(xiàn)了Serializable接口的類,readResolve和writeReplace方法必須是protected的。
(6)對于實現(xiàn)了Serializable接口的類,在readObject方法中不能調(diào)用可被覆蓋的方法。

2. 如何將類設(shè)計成不可繼承的?

方法一:用final類型來申明這個類。
方法二:將類的構(gòu)造器申明為private類型的,然后用靜態(tài)工廠獲取到這個類的實例。

3.總結(jié)

要設(shè)計一個專門為繼承而設(shè)計的類是十分困難的,所以能用復(fù)合就用復(fù)合,如果需要被繼承的類沒有實現(xiàn)類型接口,不能實現(xiàn)復(fù)合包裝,并且該類還是需要被繼承的,那么請不要在可覆蓋的方法中調(diào)用其它可覆蓋方法,或者將想要覆蓋的父類方法拷貝一份出來到子類中,做成私有方法,然后用這個私有方法替代調(diào)用super.method()(method指的是方法名)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容