方法重寫是Java中多態性的核心概念之一,允許子類別提供其超類別中已定義的方法的特定實現。這個強大的功能有助於實現運行時多態性並啟用動態方法調度。在這篇文章中,我們將深入研究基本概念、規則和現實世界的範例,以徹底理解方法重寫。
當子類別使用相同的方法簽署(相同的名稱、參數和返回類型或協變返回類型)從其超類別重新定義方法時,就會發生方法重寫。與在編譯時解決的方法重載不同,方法重寫實作了運行時多態性,其中實際呼叫的方法取決於物件的執行時間類型。
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() 是私有的,因此不能被覆寫,因為它不被子類別繼承。
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() 會呼叫子類別的版本。這是運行時多態性的實際應用。
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 要求重寫方法的存取等級不能降低。
透過理解和應用方法重寫,我們可以建立更靈活、可重用和多態的 Java 應用程序,這些應用程式遵循物件導向程式設計原則。
Java 基礎
陣列面試重點
Java 記憶體基礎
Java 關鍵字要點
集合架構重點
以上是多態性:Java 中的解碼方法重寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!