ポリモーフィズム 【polymorphism】 多態性 / 多相性 / ポリモルフィズム

静的型付けの言語で関数などを定義する際には、引数や返り値のデータ型を指定しなければならないため、処理内容が同じでもデータ型ごとに整数用、浮動小数点数用、複素数型用…といったように異なる(名前の)関数を何度も繰り返し定義しなくてはならず、呼び出し側も型ごとに異なる関数を呼び分けなければならない。
ポリモーフィズムに対応した言語では、同名の関数などを繰り返し定義することができ、型ごとに別々の関数を用意しなくても一つの(共通の名前を持つ)関数としてまとめることができる。ただし、具体的な処理内容は型ごとに個別に記述しなければならない。
分類
呼び出し側に記述された引数の型や数の違いに応じて、処理系が自動的に合致する実装を選んで呼び出してくれる方式を「アドホック多相」(ad hoc polymorphism)、呼び出し時に型をパラメータとして明示的に指定する方式を「パラメータ多相」あるいは「パラメトリック多相」(parametric polymorphism)という。後者はC言語などでは「テンプレート」(template)、Javaなどでは「ジェネリクス」(generics)と呼ばれる機能として知られる。
また、二つのデータ型が基本型と派生型の関係にあるとき、基本型を引数に取る関数を定義することにより派生型でも同じように動作させるようにすることができ、これを「サブタイプ多相」「部分型多相」(subtype polymorphism)などという。オブジェクト指向プログラミング言語では親クラスから派生(継承)した子クラスがメソッドの内容を上書き(オーバーライド)したり、インターフェースで定義されたメソッドを実装することによりこれを実現している。
(2019.2.19更新)
関連用語
他の用語辞典による「ポリモーフィズム」の解説 (外部サイト)
資格試験などの「ポリモーフィズム」の出題履歴
▼ 基本情報技術者試験
【令7修6 問7】 オブジェクト指向プログラミングにおける,多相性を実現するためのオーバーライドの説明はどれか。
【令7公 問12】 オブジェクト指向プログラミングの特徴のうち,異なるクラスのオブジェクトを同一のインタフェースで操作したときに,操作対象クラスに応じた異なる動作を可能にすることを何と呼ぶか。
【令5修7 問7】 オブジェクト指向プログラミングにおける,多相性を実現するためのオーバーライドの説明はどれか。
【平29秋 問7】 オブジェクト指向プログラミングにおける,多相性を実現するためのオーバーライドの説明はどれか。
【平26秋 問47】 多相性を実現するときに,特有のものはどれか。