方法重寫是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中文網其他相關文章!

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java實現“一次編寫,到處運行”通過編譯成字節碼並在Java虛擬機(JVM)上運行。 1)編寫Java代碼並編譯成字節碼。 2)字節碼在任何安裝了JVM的平台上運行。 3)使用Java原生接口(JNI)處理平台特定功能。儘管存在挑戰,如JVM一致性和平台特定庫的使用,但WORA大大提高了開發效率和部署靈活性。

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

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