【ぽりもーふぃずむ】

ポリモーフィズム とは?

最終更新:
💡 「同じ命令」を型に応じてそれぞれが自分流に解釈する仕組み
📌 このページのポイント
Animal speak() Dog speak() Cat speak() Bird speak() 「ワン!」 「ニャー」 「ピヨ」
ポリモーフィズムの仕組み
ひよこ ひよこ
ポリモーフィズムって名前が難しい
ペンギン先生 ペンギン先生
「多態性」とも言うよ。簡単に言うと「同じメソッド名を呼んでも、オブジェクトの種類によって違う動作をする」こと。犬も猫も「speak()」を持っていて、犬は「ワン」、猫は「ニャー」と返す。呼ぶ側は犬か猫かを気にしなくていい。
ひよこ ひよこ
それって何がうれしいの?
ペンギン先生 ペンギン先生
呼び出す側のコードが型に依存しなくなるのが大きい。動物のリストを「for文でspeak()を呼ぶ」と書けば、犬でも猫でも、後から追加した鳥でも、同じコードが動く。新しい型を追加するとき、呼び出し側を変えなくていい。
ひよこ ひよこ
オーバーロードとオーバーライドって違うの?
ペンギン先生 ペンギン先生
全然違う。オーバーライド継承した子クラスで親のメソッドを上書きすること。オーバーロードは同じクラス内で、同じ名前のメソッド引数の型や数で区別して複数定義すること。例えばprint(int)とprint(String)を別々に定義するのがオーバーロード。
ひよこ ひよこ
おもしろい!ダックタイピングとポリモーフィズムは同じ?
ペンギン先生 ペンギン先生
目指す結果は似てるけど仕組みが違う。ポリモーフィズムは継承インターフェースによる「型の階層」が前提。ダックタイピングはPythonJavaScriptのように「同じメソッドを持っていれば型が違っても同じように扱える」考え方で、継承関係を必要としない。「アヒルのように歩いてアヒルのように鳴くなら、それはアヒルだ」という発想からの名前なんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ポリモーフィズムって出てきたら「同じ呼び方でも型によって動きが変わる」と思えばだいたいOK!
📖 おまけ:英語の意味
「Polymorphism」 = 多様な形・多態性
💬 ギリシャ語の「poly(多くの)+ morphe(形)」から。1つの名前が多くの形(動作)を持つという意味
← 用語集にもどる