ホームページ >バックエンド開発 >C++ >メソッド継承の「新しい」キーワードと「オーバーライド」キーワードの違いは何ですか?

メソッド継承の「新しい」キーワードと「オーバーライド」キーワードの違いは何ですか?

DDD
DDDオリジナル
2025-01-28 11:56:09261ブラウズ

What's the Difference Between `new` and `override` Keywords in Method Inheritance?

- 「新しい」および「オーバーライド」キーワードの詳細な理解シーン1:ベースクラス

この文法は、基本クラスの仮想メソッドを宣言します。仮想メソッドは、特定の実装を提供するために、デリバティブカテゴリで書き直すことができます。

シーン1:部門クラス

<code class="language-c#">public virtual void DoIt();</code>
派生した方法では、「新しい」の使用は新しい独立した方法を作成し、その名前は基本クラスの方法と同じです。ただし、これは書き直されるとは見なされず、基本クラスが呼び出された場合、基本クラスの動作は基本クラスの動作に影響しません。

シーン2:ベースクラス

これは非困難な方法であり、派生クラスで書き直すことはできません。デリバティブは、「新しい」モディファイアを使用して、同じ名前の新しいメソッドを実現する必要があります。
<code class="language-c#">public new void DoIt();</code>

シーン2:部門クラス

「オーバーライド」修飾子は、派生クラスのメソッドが基本クラスの同じ署名の別の方法を書き換えていることを示しています。呼び出しが基本クラスによって呼び出されると、書き換えの方法が実行されます。

<code class="language-c#">public void DoIt();</code>
実際の違い

オーバーライド:参照タイプに関係なく、メソッドが呼び出される限り、派生クラスの書き換え方法が呼び出されます。

<code class="language-c#">public override void DoIt();</code>
new:

派生クラスオブジェクトが参照される場合のみ、導出されたクラスで作成された新しい方法が呼び出されます。

推奨用途

    通常、拡張された継承方法の動作が推奨される場合、「オーバーライド」が推奨されます。派生クラスに同じ名前の新しいメソッドを作成する場合は、「new」を使用します。
  • 次のコードを検討してください: この例では、「derived.doit() "base.doit()」を書き換え、「b"変数「doit()」が「b "変数」派生"オブジェクトから呼び出された場合、それはそれを呼ぶために呼ばれます。

以上がメソッド継承の「新しい」キーワードと「オーバーライド」キーワードの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。