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

Java 重載 vs 覆寫:核心差異、識別標準與多態本質

     編輯:Java 綜合教學

核心定義

Overload(重載/多載)

同一類或繼承體系中,一組方法名相同、參數列表不同的方法。本質:對不同方法的統一稱呼。

Override(覆寫/重寫)

存在繼承關系的父子類間,子類重新定義父類已有方法(同名、同參數、同返回類型)。本質:針對同一方法給出不同實現。

重載示例與規則

public class OverloadParent {
    // 構成重載:參數類型/個數不同
    public String getPerson(String name) { return "personA" + name; }
    public String getPerson(int age) { return "personB"; }
    public String getPerson(String name, int age) { return "personC"; }
    
    // 編譯錯誤:僅返回值不同,不構成重載
    // public void getPerson(String name) { ... }
}

public class OverloadChild extends OverloadParent {
    // 繼承父類方法,可繼續重載
    public void getPerson(double money) { System.out.println("重載"); }
}

重載識別標準

  • ✅ 方法名相同
  • ✅ 參數列表不同(類型、個數、順序)
  • ❌ 僅返回值不同 → 編譯錯誤
  • ❌ 僅修飾符/拋出異常不同 → 不構成重載

原因: 調用時不指定返回類型,編譯器無法區分。

覆寫示例與規則

public class OverrideParent {
    public void fly() { System.out.println("I can fly!"); }
}

public class OverrideChild extends OverrideParent {
    @Override
    public void fly() { System.out.println("I can't fly, but I can run!"); }
    
    public static void main(String[] args) {
        OverrideParent child = new OverrideChild();
        child.fly(); // 輸出:I can't fly, but I can run!
    }
}

覆寫識別標準

  • ✅ 子類繼承父類
  • ✅ 方法簽名完全相同(名、參數、返回類型)
  • ✅ 方法體不同實現
  • ✅ @Override 註解(編譯器檢查,防止拼寫錯誤)
  • 訪問修飾符:子類 ≥ 父類(不能縮小訪問權限)
  • 拋出異常:子類 ≤ 父類(不能拋出更寬泛的受檢異常)

對比總結表

維度重載覆寫
發生位置同一類 / 父子類父子類之間
方法名相同相同
參數列表必須不同必須相同
返回類型可不同必須相同/兼容
修飾符無要求子類權限 ≥ 父類
異常無要求子類異常 ⊆ 父類
多態類型編譯期多態(靜態)運行期多態(動態)
本質不同方法同名同一方法不同實現

應用場景

  • 重載:功能相似,參數形式不同(如 println(int)/println(String)/println(Object))
  • 覆寫:子類有特有行為,父類實現無法滿足(模板方法、策略模式核心)

記憶口訣

重載:同名參數不同,返回值不算數,編譯期綁定。
覆寫:父子同名同參,實現各不同,運行期綁定。

關注「老姜談技術」,微信號:helojava,每日一帖技術雞湯。

公眾號二維碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved