多態性: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 要求重寫方法的存取等級不能降低。
方法重寫與方法重載
- 方法重寫啟用動態多態性並在繼承層次結構中運作。
- 方法重載是透過具有不同的參數類型或數字在同一類別中實現靜態多態性的一種形式。
何時使用方法重寫
- 動態方法解析:重寫方法在運行時根據物件類型解析,提供更大的靈活性。
- 擴充行為:子類別可以修改或擴充超類別方法的功能。
結論
透過理解和應用方法重寫,我們可以建立更靈活、可重用和多態的 Java 應用程序,這些應用程式遵循物件導向程式設計原則。
相關貼文
Java 基礎
陣列面試重點
Java 記憶體基礎
Java 關鍵字要點
-
集合架構重點
以上是多態性:Java 中的解碼方法重寫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
