Date d = new Date():new Date() 在堆創建對象,d 存儲引用(類似 C++ 指針)。null 對應 C++ NULL。Getter 返回可變對象引用會破壞封裝:
// 危險
public Date getDate() { return date; }
// 安全:返回副本
public Date getDate() { return (Date) date.clone(); }
工廠方法模式優於構造器:可命名、可返回子類型(如 NumberFormat.getCurrencyInstance() 返回 DecimalFormat)。
| 成員類型 | 綁定時機 | 依據 |
|---|---|---|
| 字段(含靜態) | 編譯期(靜態綁定) | 聲明類型 |
| private/static/final 方法 | 編譯期(靜態綁定) | 聲明類型 |
| 其他方法 | 運行期(動態綁定) | 實際對象類型 |
Father f = new Son();
f.field; // 訪問 Father.field
f.staticMethod(); // 調用 Father.staticMethod()
f.instanceMethod(); // 調用 Son.instanceMethod() ← 動態綁定
覆寫規則:子類方法可見性 ≥ 父類;拋出異常 ≤ 父類。
public static final;多實現;不可實例化。equals 必須覆寫 hashCode:相等對象 hashCode 必相等。散列碼無規律整數,用於哈希容器定桶。實現技巧:31 * result + fieldHash。
Cloneable、重寫 public clone()、調用 super.clone()。clone()。String 等不可變/不可克隆類無需深拷貝。| 類型 | 特點 | 訪問外部 | 典型用途 |
|---|---|---|---|
| 成員內部類 | 非靜態,隱持外部引用 | OuterClass.this | 邏輯強綁定、事件監聽器 |
| 靜態內部類 | static,無外部引用 | 不可直接訪問實例成員 | 單例模式、工具類、Builder |
| 局部內部類 | 定義在方法/塊內 | 可訪問 final/效果性最終局部變量 | 封裝邏輯、線程任務 |
| 匿名內部類 | 無名、現場實現接口/繼承類 | 同局部內部類 | 一次性回調、比較器、Runnable |
掌握這些核心特性,是寫出健壯、可維護 Java 代碼的基石。