首頁 >後端開發 >C++ >新與覆蓋:何時應該在繼承中使用每個方法修飾符?

新與覆蓋:何時應該在繼承中使用每個方法修飾符?

Susan Sarandon
Susan Sarandon原創
2025-01-28 11:51:09836瀏覽

new vs. override: When Should You Use Each Method Modifier in Inheritance?

理解繼承中的newoverride修飾符

面向對象編程中,繼承允許派生類重用和修改基類中定義的方法。然而,newoverride是兩種不同的修飾符,它們可以與繼承的方法一起使用,各自具有特定的用途。

情況一:使用new修飾符的繼承方法

使用new修飾符時,派生類創建了一個與基類方法同名的單獨方法。這實際上隱藏了基類方法在派生類中的可見性。直接引用基類的代碼將使用基類方法的實現,而引用派生類的代碼將使用派生類方法的實現。

情況二:使用override修飾符的繼承方法

另一方面,override修飾符表示派生類方法旨在用具有相同簽名的基類方法替換。這意味著當在對基類的引用上調用該方法時,它將始終使用在派生類中定義的實現。

關鍵區別

  • 方法可見性:new隱藏基類方法,而override替換它。
  • 調用解析:new始終調用派生類方法,而override調用最後定義的實現,即使通過基類引用訪問也是如此。
  • 用例:new可以用來創建方法的完全不同版本,而override用於擴展或修改基類方法的行為。

示例

考慮以下基類和派生類:

<code class="language-csharp">public class Base
{
    public virtual void DoIt()
    {
        Console.WriteLine("Base.DoIt");
    }
}

public class Derived : Base
{
    public override void DoIt()
    {
        Console.WriteLine("Derived.DoIt");
    }
}</code>

在此示例中,派生類中的override修飾符確保當在Derived類的實例上調用DoIt()時,它將執行Derived.DoIt中定義的實現,而不管使用的引用類型是什麼。

以上是新與覆蓋:何時應該在繼承中使用每個方法修飾符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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