重寫vs重載
方法重寫和方法重載是一些編程語言中的兩個概念/技術/特性。這兩個概念都允許程序員為同名的方法提供不同的實現。方法重寫允許程序員在子類中為已經在其超類中定義的方法提供另一種實現。方法重載允許程序員為具有相同名稱(在同一個類中)的多個方法提供不同的實現。
什麼是壓倒性的?
如上所述,在面向對象編程語言中,類可以擴展超級類或父類。子類可以有自己的方法,也可以選擇對父類(或其一個父類)中已定義的方法有自己的實現。因此,當後者發生時,稱為方法重寫。換句話說,如果子類提供了一個方法的實現,該方法的簽名和返回類型與父類中已定義的方法相同,則該方法將被子類的實現覆蓋(替換)。因此,如果類中存在重寫的方法,運行時系統將必須決定使用哪個方法實現。通過查看用於調用它的對象的確切類型,可以解決此問題。如果父類的對象用於調用重寫的方法,則使用父類中的實現。類似地,如果它是使用的子類的對象,則使用子類的實現。現代編程語言如java、Eifell、C++和Python允許方法覆蓋。
什麼是超載?
方法重載是一些編程語言提供的一種功能,用於創建多個具有相同名稱但具有不同輸入和輸出類型的方法。在現代編程語言中,如java、C++、C++和VB.NET版,此功能可用。可以通過創建另一個名稱相同但方法簽名不同或返回類型不同(或兩者都有)的方法重載方法。例如,如果method1(type1t1)和method1(type2t2)在同一個類中,那麼它們將重載。然後系統將必須決定在調用它時要執行哪一個。這種區別是通過查看傳遞給方法的參數類型來實現的。如果參數是類型1,則調用第一個實現;如果參數是類型2,則調用第二個實現。
重寫和重載之間有什麼區別?
雖然方法重寫和方法重載用於提供具有不同實現的方法,但這兩個概念/技術之間存在關鍵區別。首先,方法重寫的主題始終位於不同的類中,而方法重載的主題則位於同一個類中。這意味著重寫只能在允許繼承的面向對象編程語言中實現,而重載也可以在非面嚮對象語言中使用。換句話說,您重寫了超類中的方法,但在自己的類中重載了方法。