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

Java 基礎培訓(十一):方法重寫(Override)完整指南

     編輯:Java 相關知識

方法重寫是多態性的核心體現,允許子類提供父類方法的特定實現。本文詳細講解重寫規則、協變返回類型、靜態方法隱藏等關鍵概念。

重寫核心規則

規則說明
方法簽名參數類型、順序、數量必須完全一致
返回類型JDK5+ 支持協變返回類型(子類類型)
訪問權限不能比父類更嚴格(public > protected > default > private)
異常拋出不能拋出比父類更寬泛的受檢異常
final 方法不可重寫
static 方法不屬於重寫,屬於隱藏

代碼演示:重寫與隱藏

class Base {
    public void test() { System.out.println("Base.test()"); }
    public Base test(String name) { return this; }
    public final void test(int age) { System.out.println("final Base.test(int)"); }
    public static void test(Object obj) { System.out.println("static Base.test(Object)"); }
}

class Sub extends Base {
    // 標準重寫
    @Override public void test() { System.out.println("Sub.test()"); }
    
    // 協變返回類型 (JDK5+)
    @Override public Sub test(String name) { return this; }
    
    // 靜態方法隱藏(非重寫)
    public static void test(Object obj) { System.out.println("static Sub.test(Object)"); }
}

多態行為驗證

public static void main(String[] args) {
    // 父類引用指向子類對象
    Base b2 = new Sub();
    b2.test();           // 輸出: Sub.test() - 動態綁定
    b2.test("");         // 輸出: Sub.test() - 動態綁定
    b2.test(new Object()); // 輸出: static Base.test(Object) - 靜態綁定!
    
    // 直接調用靜態方法
    Sub.test(new Object());  // 輸出: static Sub.test(Object)
    Base.test(new Object()); // 輸出: static Base.test(Object)
}

關鍵點總結

  1. 實例方法動態綁定:運行時根據對象實際類型調用
  2. 靜態方法靜態綁定:編譯時根據引用類型調用,不存在重寫
  3. 協變返回類型:子類重寫方法可返回父類返回類型的子類型
  4. @Override 註解:編譯時檢查重寫正確性,防止誤寫成重載
  5. final/private/static:均不可重寫

練習建議

  • 嘗試修改返回類型為不相關類型,觀察編譯錯誤
  • 測試多參數重寫場景
  • 驗證 final 方法重寫編譯報錯
方法重寫演示
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved