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

Effective Java Item17 最小化可變性

整理 Effective Java 書中 Item 17: Minimize mutability 心得筆記

主旨

當你設計類別時,預設應該先問自己:這個物件真的需要改變狀態嗎?如果不需要,請讓它不可變(Immutable)。不可變類別更安全、更好測試、也更容易被重用與快取。

Read more

Effective Java Item16 公開類別中應使用存取方法而非公開欄位

整理 Effective Java 書中 Item 16: In public classes, use accessor methods, not public fields 心得筆記

主旨

公開類別若直接暴露成員欄位(如 public int x),將會失去封裝帶來的所有好處:無法控制欄位存取、難以變更內部結構、也無法強制不變條件。正確做法是:使用私有欄位,並搭配 public 的 getter / setter 方法進行存取。

Read more

Effective Java Item15 最小化類別與成員的可存取性

整理 Effective Java 書中 Item 15: Minimize the accessibility of classes and members 心得筆記

主旨

在 Java 中設計良好的元件,首要原則是資訊隱藏(information hiding),也稱為封裝(encapsulation)。簡單來說,就是把類別的內部細節封起來,讓外部只能透過定義好的 API 存取必要功能。這可以降低系統各部分之間的耦合,提升開發效率、維護性與模組重用性。

Read more