Javaの動的多相性と静的多相性には、どんな違いがありますか?
Javaにおけるポリモルフィズムは、動的ポリモルフィズムと静的ポリモルフィズムに分けられます。
ダイナミックポリモーフィズムとは、実際のオブジェクトの型に基づいてランタイム時に呼び出されるメソッドを決定することを指します。具体的には、親クラスの参照が子クラスのオブジェクトを指す場合、親クラスの参照を使用して呼び出されるメソッドは、子クラスの実際の型に基づいてどのメソッドを呼び出すかが決定されます。このようなポリモーフィズムはJavaの継承メカニズムと仮想メソッドテーブルによって実現されています。
静的な多態性とは、コンパイル時にメソッドの宣言型に基づいて呼び出されるメソッドを決定することを指します。具体的には、親クラスの参照が子クラスオブジェクトを指す場合、親クラスの宣言型に基づいて呼び出されるメソッドがどちらかを決定します。この多態性は、Javaのメソッドのオーバーロードメカニズムによって実現されています。
そのため、動的ポリモーフィズムは実行時にメソッドの呼び出しを決定しますが、静的ポリモーフィズムはコンパイル時にメソッドの呼び出しを決定します。動的ポリモーフィズムは継承とオーバーライドによって実現されますが、静的ポリモーフィズムはメソッドのオーバーロードによって実現されます。