Effective Java Item19:設計可繼承的類別,否則就禁止繼承

整理 Effective Java 書中 Item 19: Design and document for inheritance or else prohibit it 心得筆記

主旨

Java 裡的繼承功能很強,但使用起來也很危險。如果你打算讓別人「繼承你的類別」,你不只是要寫出可以用的 API,還要公開類別的內部行為細節。如果沒做到這一點,繼承後的子類可能會在某次更新中爆掉。

所以這一條的建議是:

如果你沒打算讓別人繼承,就該禁止繼承;
如果你開放繼承,就要設計與文件都做到位。

Read more

Effective Java Item18:用組合取代繼承

整理 Effective Java 書中 Item 18: Favor composition over inheritance 心得筆記

主旨

繼承常被拿來重用程式碼,但其實風險也很高,尤其當你繼承的類別不是為了擴充而設計。這篇重點是:「與其繼承一個現成的類別,不如把它包進一個欄位(組合)來用」,這樣可以避開繼承帶來的封裝破壞與潛在 bug,讓設計更穩健。

Read more