web-dev-qa-db-ja.com

ポリモーフィズム、オーバーロード、オーバーライドは同様の概念ですか?

ポリモーフィズム、オーバーロード、オーバーライドの概念については、私と同じように思えるので非常に混乱しています。これらの概念を説明してください、そしてそれらは互いにどのように異なっていますか

非常に混乱しているので、適切に案内してください。

ありがとう

30
Ammar Raja

多態性 はオーバーライドによって実現できます。要するに、ポリモーフィズムとは、オブジェクトの性質に応じて異なる動作を提供する(異なる実装を使用する)オブジェクトの能力を指します。具体的には、クラス階層内での位置に応じて。

メソッドオーバーライド は、スーパークラスまたはインターフェイスで定義されたメソッドがそのサブクラスの1つによって再定義され、スーパークラスが提供する動作を変更/置換する場合です。実装または別の呼び出しの決定は、操作の呼び出し元のオブジェクトに応じて、実行時に動的に行われます。オーバーライドするとき、メソッドのシグネチャは同じままであることに注意してください。

メソッドのオーバーロード はポリモーフィズムとは無関係です。メソッドのさまざまな形式を定義することを指します(通常は、さまざまなパラメーター番号またはタイプを受け取ることによって)。静的多型とみなすことができます。実装または別の実装を呼び出す決定は、コーディング時に行われます。この場合、メソッドの署名を変更する必要があることに注意してください。

演算子のオーバーロード は、ポリモーフィズムに関連する異なる概念であり、特定の言語依存演算子がそのオペランドのタイプに基づいて異なる動作をする能力を指します(たとえば、+は、Stringsとの連結および数値オペランドとの加算を意味します)。

ウィキペディアの は非常にわかりやすい例です。

次の関連する質問も役立つ場合があります。

61
Xavi López

まもなく、それらは同じではありません。

オーバーロードとは、同じ名前で異なるパラメーターを持つメソッドを作成することを意味します。

オーバーライドとは、サブクラス内のスーパークラスのメソッドの本体を再定義して、メソッドの動作を変更することです。

ポリモーフィズムは、オーバーライドとオーバーロードを含む幅広い概念であり、その範囲内にはるかに含まれます。 多型に関するウィキペディアの説明 は、多型をよりよく理解するのに役立ちます。特にサブタイプ多型(または包含多型)セクションは、見るべき場所です。

7
basar