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

Java 重寫與重載完整比較:規則差異、super 關鍵字、Overload 規則與總結對照表

     編輯:Java 程式設計入門

Java 重寫與重載完整比較


重寫

子類別對父類別允許存取的方法重新實作,「外殼不變,核心重寫」。回傳值與參數列表不可變。好處:子類別可定義特有行為。

重寫範例

class Animal { public void move() { System.out.println("動物可以移動"); } }
class Dog extends Animal { public void move() { System.out.println("狗可以跑和走"); } }
public class TestDog {
    public static void main(String[] args) {
        Animal a = new Animal(); a.move(); // 動物可以移動
        Animal b = new Dog();  b.move(); // 狗可以跑和走(多型)
    }
}

編譯期檢查參考型別(Animal 有 move),執行期依實際物件(Dog)分派。

嘗試呼叫子類特有方法會編譯錯誤

Animal b = new Dog();
b.bark(); // 錯誤:Animal 無 bark 方法

重寫九大規則

  1. 參數列表必須完全相同
  2. 回傳型別必須完全相同
  3. 存取權限不可比父類更低(父 public → 子不可 protected)
  4. 僅父類成員方法可被子類重寫
  5. final 方法不可重寫
  6. static 方法不可重寫(可重新宣告)
  7. 同套件:可重寫除 private/final 外所有方法
  8. 不同套件:僅可重寫 public/protected 非 final 方法
  9. 可拋出任意非檢查異常;不可拋出新的或更寬泛檢查異常
  10. 建構方法不可重寫
  11. 無法繼承的方法無法重寫

super 關鍵字呼叫父類重寫方法

class Dog extends Animal {
    public void move() {
        super.move(); // 呼叫父類版本
        System.out.println("狗可以跑和走");
    }
}

輸出:

動物可以移動
狗可以跑和走

重載

同一類別內方法名相同、參數列表不同(個數、型別、順序)。回傳型別可同可不同。

重載五大規則

  1. 必須改變參數列表(個數/型別/順序)
  2. 可改變回傳型別
  3. 可改變存取修飾符
  4. 可宣告新的或更寬檢查異常
  5. 可在同類或子類中重載
  6. 無法以回傳值型別作為重載區分標準

重載範例:Overloading.java

public class Overloading {
    public int test() { System.out.println("test1"); return 1; }
    public void test(int a) { System.out.println("test2"); }
    public String test(int a, String s) { System.out.println("test3"); return "returntest3"; }
    public String test(String s, int a) { System.out.println("test4"); return "returntest4"; }
    public static void main(String[] args) {
        Overloading o = new Overloading();
        System.out.println(o.test());
        o.test(1);
        System.out.println(o.test(1,"test3"));
        System.out.println(o.test("test4",1));
    }
}

重寫 vs 重載 差異總結表

差異點重載重寫
參數列表必須修改絕不可修改
回傳型別可修改絕不可修改
異常可修改可減少/刪除,不可拋出新/更寬異常
存取權限可修改不可更嚴格(可放寬)

總結

  • 重寫:父子類別間多型表現
  • 重載:單一類別內多型表現
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved