web-dev-qa-db-ja.com

メソッドのオーバーロードはポリモーフィズムと見なされますか?

メソッドのオーバーロードはポリモーフィズムの一部と見なされますか?

24
iTayb

「ポリモーフィズム」は単なる言葉であり、世界的に合意された正確な定義はありません。違いは「ポリモーフィズム」の選択された定義にあり、特定の言語の機能としてのメソッドのオーバーロードの本質にはないため、質問に対する「はい」または「いいえ」の答えによって啓発されることはありません。ここにある他のほとんどの回答でその証拠を見ることができます。それぞれが独自の定義を導入し、それに対して言語機能を評価しています。

17
Marko Topolnik

ポリモーフィズムにはさまざまな種類があります

  • オーバーロードポリモーフィズム(アドホック多相性とも呼ばれます)
  • ポリモーフィズムのオーバーライド

そうです、それはポリモーフィズムの一部です。

40
Darin Dimitrov

厳密に言えば、ポリモーフィズム、 wikipedia

あるタイプAが、別のタイプBのように見え、そのように使用される能力です。

したがって、オーバーロードは1つのタイプの一部として定義されるため、メソッドのオーバーロード自体は、この定義ポリモーフィズムの一部とは見なされません。

インクルージョンポリモーフィズム(通常はオーバーライドと考えられています)について話している場合、それは別の問題であり、そうです、それはポリモーフィズムの一部と見なされます。

包含ポリモーフィズムは型理論の概念であり、いくつかの共通のスーパークラスによって関連付けられている限り、名前は多くの異なるクラスのインスタンスを表すことができます。

12
Oded

多型には2つのタイプがあります。

  1. 静的
  2. 動的。

オーバーロードは静的ポリモーフィズムタイプです。オーバーライドは動的(または実行時)ポリモーフィズムになります。

参照。 http://en.wikipedia.org/wiki/Polymorphism_(computer_science) これで詳細が説明されています。

9
raj

いいえ、オーバーロードはありません。たぶんあなたは メソッドのオーバーライド を参照します。これは確かにポリモーフィズムの一部です。

さらに明確にするために、ウィキペディアから:

ポリモーフィズムは、メソッドのオーバーロードやメソッドのオーバーライドと同じではありません。 1 ポリモーフィズムは、インターフェイスまたはより一般的な基本クラスへの特定の実装の適用にのみ関係します。

つまり、メソッドのオーバーライドとメソッドのオーバーロード、およびポリモーフィズムに関する一部の言語の便利な機能ですが、オブジェクトがその階層内の別のオブジェクトであるかのように動作する機能のみを考慮するポリモーフィズムの主な関心事ではありません鎖。

8
Jorge Córdoba

メソッドのオーバーライドまたはオーバーロードはポリモーフィズムではありません。正しい言い方をすれば、ポリモーフィズムは、メソッドのオーバーライドまたはオーバーロードを使用して、また他の方法を使用して実装できるということです。

メソッドのオーバーライドを使用してポリモーフィズムを実装するために、サブクラスのメソッドの動作をオーバーライドできます。

メソッドのオーバーロードを使用してポリモーフィズムを実装するには、同じ名前と同じ数のパラメーターを使用して、データ型が異なる多くのメソッドを記述し、これらのメソッドで異なる動作を実装する必要があります。今ではそれもポリモーフィズムです。

ポリモーフィズムを実装する他の方法は、演算子のオーバーロードとインターフェイスの実装です。

ウィキペディアのペダンティックスはさておき、ポリモーフィズムについて考える1つの方法は、呼び出しに使用されるオブジェクトインスタンスのタイプに応じて、実行時に1行のコード/単一のメソッド呼び出しが異なることを実行できることです。

メソッドのオーバーロードは、実行時の動作を変更しません。オーバーロードすると、コードを記述してコンパイルするときに同じメソッド名の引数リストの選択肢が増えますが、コンパイルすると、選択肢はコードで永久に修正されます。

ポリモーフィズムの一部であるメソッドのオーバーライドと混同しないでください。

5
dthorpe