私には長年の疑問があります。メソッドのオーバーロードがポリモーフィズムの一種なのか、それともまったく別のものなのか、誰か教えてください。
5 に答える
メソッドのオーバーロードは、名前が同じでも引数が異なるメソッドを使用できるようにする単なる構文糖衣です。ポリモーフィズムとは何の関係もありません。メソッドのオーバーロードは通常、異なる引数を受け入れる 2 つのメソッドを定義するために使用されます。
public void println(boolean x) //...
public void println(char x) //...
または、特定のパラメーターをスキップして、いくつかのデフォルトを使用するには:
public String substring(int beginIndex) //...
public String substring(int beginIndex, int endIndex) //...
一方、メソッドのオーバーライドは継承の基盤であり、ポリモーフィズムとより密接に関連しています。
ポリモーフィズムは、文字通り、複数の振る舞いを持つものを意味します。
Javaでは、静的および実行時のポリモーフィズムを持つことができます。
オーバーロードは、さまざまな引数を渡すことによってさまざまな動作を可能にするため、静的なポリモーフィズムです。ただし、これは完了時にのみ解決されるため、静的です。
関数の実際の呼び出しは、実行時にのみ使用可能であり、したがって動的である、それを呼び出すオブジェクトのタイプに依存するため、オーバーライドは動的ポリモーフィズムです。
いいえそうではありません。
オーバーロードを使用すると、同じメソッド名の異なる実装を異なるシグネチャで提供するだけです。
ポリモーフィズム(サブタイプによる) には同じ署名 (メソッド名またはパラメーターのいずれかによって作成される) が必要であるため、2 つのものが交差することはありません。
いいえ、そうではありません。メソッドのオーバーロードです。
Java はインターフェースを介してポリモーフィズムを行います。多重継承はありません。
ただし、複数のインターフェイスとコンポジット/デリゲート パターンを使用して、複数の継承をシミュレートすることはできます。
いいえ、オブジェクト指向プログラミングとは関係ありません。オーバーロードとは、異なるメソッド シグネチャに同じ名前を使用できることを意味します。