Object 類:所有類的隱式父類
// 以下兩種寫法等價
public class Person { }
public class Person extends Object { }
toString():對象的字符串名片
equals():業務邏輯相等性判斷
類型轉換:向上轉型與向下轉換
| 方向 | 術語 | 代碼示例 | 訪問權限 | 安全性 |
| 子類 → 父類 | 向上轉型 | Animal a = new Cat(); | 僅父類成員 | 隱式、安全 |
| 父類 → 子類 | 向下轉型 | Cat c = (Cat) animal; | 子類全部成員 | 需 instanceof 守護,否則拋 ClassCastException |
instanceof 最佳實踐
if (animal instanceof Cat) {
Cat c = (Cat) animal; // 安全
c.catchMouse();
}
// Java 14+ 模式匹配簡寫
if (animal instanceof Cat c) {
c.catchMouse();
}
動態綁定與多態:運行時決定「調用誰」
核心條件(三要素)
- 繼承(extends/implements)
- 重寫(Override,方法簽名相同,返回類型协变)
- 父類引用指向子類對象(向上轉型)
運行時調用鏈路
class Animal { void sound() { print("動物叫聲"); } }
class Cat extends Animal { @Override void sound() { print("喵~"); } }
class Dog extends Animal { @Override void sound() { print("汪!"); } }
public class Test {
public static void main(String[] args) {
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.sound(); // 輸出:喵~
a2.sound(); // 輸出:汪!
// 編譯期綁定 Animal.sound(),運行期根據實際對象類型分派
}
}
可擴展性演示:開閉原則(OCP)
- 新增
Bird extends Animal 並重寫 sound()。
- 測試代碼零修改,直接
new Bird() 賦值給 Animal 變量即可。
- 多態消除了大量
if-else/typeof 分支,符合「對擴展開放,對修改關閉」。
構造方法調用順序(含繼承)
- 父類靜態字段/靜態塊
- 子類靜態字段/靜態塊
- 父類實例字段/實例塊
- 父類構造方法
- 子類實例字段/實例塊
- 子類構造方法
子類構造方法首行隱式/顯式調用 super(...),保證父類部分先完成初始化。
總結:多態威力
- 統一介面處理異構對象(集合存儲、參數傳遞、返回類型)。
- 解耦「做什麼」與「怎麼做」,支援插件化架構、策略模式、模板方法模式。
- 配合抽象類/介面,構建可擴展框架骨架。
- 上一篇文章: JAXB 實戰指南:XML 與 Java 對象雙向轉換、核心註解詳解與最佳實踐
- 下一篇文章: Spring MVC 生產環境數據源憑證隱藏方案:自定義 PropertyPlaceholderConfigurer 實現敏感配置外部化
Copyright ©
程式碼之家 All Rights Reserved