建立可重用、可維護的 Java 類別庫,核心在於**明確界定介面與實作的邊界**。本文總結類別設計的三大支柱:套件組織、存取控制、介面與實作分離,並闡述為何這些機制能讓庫設計者擁有「安全犯錯、自由重構」的能力。
C 專案約 5-10 萬行即因單一命名空間導致名稱衝突而難以擴展。Java 透過:
package 關鍵字宣告隸屬套件com.company.project)保證全域唯一import 關鍵字精確控制可見類別徹底消除命名衝突,讓大型專案也能輕鬆管理數千個類別。
private,用戶只看見真正需要的 public 介面private/protected/package-private 實作細節| 修飾詞 | 同類別 | 同套件 | 子類別(不同套件) | 任意類別 |
|---|---|---|---|---|
private | ✓ | ✗ | ✗ | ✗ |
package-private (無修飾詞) | ✓ | ✓ | ✗ | ✗ |
protected | ✓ | ✓ | ✓ | ✗ |
public | ✓ | ✓ | ✓ | ✓ |
建議類別原始碼組織順序:
public class X {
// 1. public 介面優先:用戶最關心
public void pub1() { ... }
public void pub2() { ... }
// 2. protected:子類別擴充點
protected void prot1() { ... }
// 3. package-private:套件內協作
void pkg1() { ... }
// 4. private 實作細節:最後
private void impl1() { ... }
private int internalState;
}
雖原始碼仍混雜介面與實作,但現代 IDE 的「大綱視圖」與 Javadoc 已能完美分離呈現。
這是最被低估的價值:
List 而非 ArrayList,參數用 Map 而非 HashMapJava 的套件與存取控制機制,不只是語法規則,更是一套**管理複雜度、保護投資、啟用演進**的工程學體系。掌握其哲學,你設計的類別庫將具備:
這才是物件導向「高內聚、低耦合」在工程層面的真實落地。