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

Java 方法重寫規則全解析:Override 註解、參數、返回值、訪問權限、異常聲明完整指南

     編輯:Java 相關知識

方法重寫是 Java 多態的核心體現。本文系統講解重寫定義、@Override 註解作用、五大硬性規則(參數列表、返回類型、訪問權限、拋出異常、final/static 限制)、代碼實戰與常見誤區,助你精準掌握重寫機制。

什麼是方法重寫

子類繼承父類非私有方法後,保持方法簽名完全一致(方法名、參數列表、返回類型),重新實現方法體,稱為重寫。運行時根據對象實際類型動態分發(動態綁定)。

代碼示例


public class Person {
    public void eat() {
        System.out.println("父類 Person eat");
    }
}
public class Student extends Person {
    @Override
    public void eat() {
        System.out.println("子類 Student eat");
    }
    public static void main(String[] args) {
        Student s = new Student();
        s.eat(); // 輸出:子類 Student eat
    }
}

調用父類方法:子類中用 super.eat() 顯式調用。

五大重寫硬性規則

規則要求違反後果
1. 參數列表必須完全相同(個數、類型、順序)變為重載
2. 返回類型JDK 5 前必須相同;JDK 5+ 支持協變返回類型(子類返回類型為父類返回類型的子類)編譯錯誤
3. 訪問權限子類權限 ≥ 父類權限(public > protected > default > private)編譯錯誤
4. 拋出異常子類異常 ≤ 父類異常(範圍更小、更少、或不拋)編譯錯誤
5. 非 final/static父類方法不能是 final(不可重寫)或 static(屬於類,非多態)編譯錯誤 / 隱藏而非重寫

詳細規則解析

規則 1:參數列表不可變


// 父類
public void doSomething(int a, String b) {}
// 子類 - 錯誤:參數類型不同 -> 重載
public void doSomething(String a, int b) {}

規則 2:協變返回類型


class Animal {}
class Cat extends Animal {}
class Parent {
    public Animal get() { return new Animal(); }
}
class Child extends Parent {
    @Override
    public Cat get() { return new Cat(); } // 合法:Cat 是 Animal 子類
}

規則 3:訪問權限不能降低


class Parent {
    protected void method() {} // protected
}
class Child extends Parent {
    @Override
    public void method() {} // 合法:public > protected
    // private void method() {} // 錯誤:private < protected
}

規則 4:異常聲明收窄


class Parent {
    void method() throws IOException, SQLException {}
}
class Child extends Parent {
    @Override
    void method() throws FileNotFoundException {} // 合法:FileNotFoundException 繼承 IOException
    // void method() throws Exception {} // 錯誤:Exception 範圍更大
}

規則 5:final 與 static 禁重寫

  • final:編譯期綁定,禁止重寫。
  • static:屬於類,不屬於實例。子類定義同名 static 方法叫方法隱藏,非多態。
  • private:不可繼承,自然不可重寫(子類同名方法是新方法)。

@Override 註解:編譯期安全網

  • 標註在子類方法上,編譯器驗證是否符合重寫規則。
  • 拼寫錯誤、參數不匹配、父類無此方法時直接報錯。
  • 強烈建議所有重寫方法加上。

重寫 vs 重載 對比

維度重寫重載
發生位置父子類同一類
方法名相同相同
參數列表相同不同
返回類型相同/協變可不同
多態性運行時動態綁定編譯時靜態綁定

常見誤區

  1. 構造器可重寫:構造器不可繼承,無重寫概念。
  2. 靜態方法可重寫:是隱藏,調用時看引用類型,非對象類型。
  3. 返回類型任意改:僅支持協變,基本類型必須完全一致。
  4. 拋更多異常:違反里氏替換原則,編譯不通過。

方法重寫是實現多態、模板方法模式、策略模式的基石。牢記「參數同、返回兼、權限大、異常小、非靜止」,善用 @Override,寫出正確且可擴展的面向對象代碼。

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