首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 面向對象進階:Object 核心方法、類型轉換、動態綁定與多態機制深度解析

     編輯:Java 綜合教學

Object 類:所有類的隱式父類

// 以下兩種寫法等價
public class Person { }
public class Person extends Object { }

toString():對象的字符串名片

  • 默認實現:getClass().getName() + "@" + Integer.toHexString(hashCode())(如 Person@15db9742),無業務意義。
  • 必須重寫:返回業務關鍵字段組合,便於日誌/調試。
    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "'}";
    }
  • 字符串拼接 "user=" + user 會自動調用 user.toString()。

equals():業務邏輯相等性判斷

  • 默認實現:this == obj(比較引用地址)。
  • 重寫契約:自反性、對稱性、傳遞性、一致性、非空性。
  • 標準重寫模板:
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        User user = (User) o;
        return id == user.id && Objects.equals(name, user.name);
    }
  • 配套重寫 hashCode():equals(true) ⇒ hashCode() 相等,否則 HashMap/HashSet 失效。

類型轉換:向上轉型與向下轉換

instanceof 最佳實踐

if (animal instanceof Cat) {
    Cat c = (Cat) animal; // 安全
    c.catchMouse();
}
// Java 14+ 模式匹配簡寫
if (animal instanceof Cat c) {
    c.catchMouse();
}

動態綁定與多態:運行時決定「調用誰」

核心條件(三要素)

  1. 繼承(extends/implements)
  2. 重寫(Override,方法簽名相同,返回類型协变)
  3. 父類引用指向子類對象(向上轉型)

運行時調用鏈路

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 分支,符合「對擴展開放,對修改關閉」。

構造方法調用順序(含繼承)

  1. 父類靜態字段/靜態塊
  2. 子類靜態字段/靜態塊
  3. 父類實例字段/實例塊
  4. 父類構造方法
  5. 子類實例字段/實例塊
  6. 子類構造方法

子類構造方法首行隱式/顯式調用 super(...),保證父類部分先完成初始化。

總結:多態威力

  • 統一介面處理異構對象(集合存儲、參數傳遞、返回類型)。
  • 解耦「做什麼」與「怎麼做」,支援插件化架構、策略模式、模板方法模式。
  • 配合抽象類/介面,構建可擴展框架骨架。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方向術語代碼示例訪問權限安全性
子類 → 父類向上轉型Animal a = new Cat();僅父類成員隱式、安全
父類 → 子類向下轉型Cat c = (Cat) animal;子類全部成員需 instanceof 守護,否則拋 ClassCastException