首頁 >Java >java教程 >多態性:Java 中的解碼方法重寫

多態性:Java 中的解碼方法重寫

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 18:14:021018瀏覽

Polymorphism: Decoding Method Overriding in Java

方法重寫是Java中多態性的核心概念之一,允許子類別提供其超類別中已定義的方法的特定實現。這個強大的功能有助於實現運行時多態性並啟用動態方法調度。在這篇文章中,我們將深入研究基本概念、規則和現實世界的範例,以徹底理解方法重寫


什麼是方法重寫?

當子類別使用相同的方法簽署(相同的名稱、參數和返回類型或協變返回類型)從其超類別重新定義方法時,就會發生方法重寫。與在編譯時解決的方法重載不同,方法重寫實作了運行時多態性,其中實際呼叫的方法取決於物件的執行時間類型。


1.方法重寫規則

1。方法簽章一致性:

  • 子類別中的方法名稱和參數清單必須與超類別中的方法完全相符。

2。傳回類型和協變回傳類型:

  • 傳回型別必須相同或協變型別(超類別中原始回傳類型的子型別)。

3。存取修飾符:

  • 子類別中的方法不能具有比超類別中的方法更嚴格的存取等級(例如,如果超類別方法受保護,則子類別不能將其設為私有)。

公有>受保護>預設(包-私有)>私人

4。方法可見性:

  • 私有方法不能重寫。相反,如果在子類別中重新定義,它們將被視為全新的方法。

範例:基本方法重寫

package oops.polymorphism;

// Base class
public class MethodOverridingParent {

    // Private Methods CANNOT be overridden
    private String getName() {
        return "Hello";
    }

    // Display method to be overridden (Access Modifier: default)
    void display() {
        System.out.println("Parent Method Called");
    }

    // Return type is Number (parent class of Integer, Double, etc.)
    public Number getCount() {
        return 20;
    }
}

在MethodOverridingParent中,只有display()和getCount()可以被子類別覆蓋,因為它們可以在父類別之外存取。然而,getName() 是私有的,因此不能被覆寫,因為它不被子類別繼承。


2.子類別中的方法重寫

package oops.polymorphism;

public class MethodOverridingChild extends MethodOverridingParent {

    // Access Level Increased; Default -> Protected
    @Override
    protected void display() {
        System.out.println("Child Method Called");
    }

    public static void main(String[] args) {

        // Calling Parent Class Method
        MethodOverridingParent parent = new MethodOverridingParent();
        parent.display(); // Output: Parent Method Called

        // Calling Child Class Overridden Method - Runtime Polymorphism
        MethodOverridingParent child = new MethodOverridingChild();
        child.display(); // Output: Child Method Called
    }
}

說明:由於子類別 MethodOverridingChild 中重寫了 display(),因此在 MethodOverridingChild 實例上呼叫 display() 會呼叫子類別的版本。這是運行時多態性的實際應用。


3.協變回傳類型:一個實際範例

Java 對協變回傳類型的支援允許子類別傳回比超類別的回傳類型更具體的類型。這種方法遵循 SOLID 原則中的里氏替換原理,增強了程式碼彈性。

package oops.polymorphism;

// Base class
public class MethodOverridingParent {

    // Private Methods CANNOT be overridden
    private String getName() {
        return "Hello";
    }

    // Display method to be overridden (Access Modifier: default)
    void display() {
        System.out.println("Parent Method Called");
    }

    // Return type is Number (parent class of Integer, Double, etc.)
    public Number getCount() {
        return 20;
    }
}

說明:在 CovariantReturnType 中,getCount() 透過傳回 Integer(Number 的子型別)來覆寫父方法,示範了協變回傳類型。該方法仍然是公共的,因為 Java 要求重寫方法的存取等級不能降低。


方法重寫與方法重載

  • 方法重寫啟用動態多態性並在繼承層次結構中運作。
  • 方法重載是透過具有不同的參數類型或數字在同一類別中實現靜態多態性的一種形式。

何時使用方法重寫

  1. 動態方法解析:重寫方法在運行時根據物件類型解析,提供更大的靈活性。
  2. 擴充行為:子類別可以修改或擴充超類別方法的功能。

結論

透過理解和應用方法重寫,我們可以建立更靈活、可重用和多態的 Java 應用程序,這些應用程式遵循物件導向程式設計原則。


相關貼文

  • Java 基礎

  • 陣列面試重點

  • Java 記憶體基礎

  • Java 關鍵字要點

  • 集合架構重點

編碼快樂!

以上是多態性:Java 中的解碼方法重寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn