【ぽりもーふぃずむ】

ポリモーフィズム とは?

💡 「同じ命令」を型に応じてそれぞれが自分流に解釈する仕組み
📌 このページのポイント
Animal speak() Dog speak() Cat speak() Bird speak() 「ワン!」 「ニャー」 「ピヨ」
ポリモーフィズムの仕組み
ひよこ ひよこ

ポリモーフィズムって名前が難しい

ペンギン先生 ペンギン先生

「多態性」とも言うよ。簡単に言うと「同じメソッド名を呼んでも、オブジェクトの種類によって違う動作をする」こと。犬も猫も「speak()」を持っていて、犬は「ワン」、猫は「ニャー」と返す。呼ぶ側は犬か猫かを気にしなくていい。

ひよこ ひよこ

それって何がうれしいの?

ペンギン先生 ペンギン先生

呼び出す側のコードが型に依存しなくなるのが大きい。動物のリストを「for文でspeak()を呼ぶ」と書けば、犬でも猫でも、後から追加した鳥でも、同じコードが動く。新しい型を追加するとき、呼び出し側を変えなくていい。

ひよこ ひよこ

オーバーロードとオーバーライドって違うの?

ペンギン先生 ペンギン先生

全然違う。オーバーライド継承した子クラスで親のメソッドを上書きすること。オーバーロードは同じクラス内で、同じ名前のメソッド引数の型や数で区別して複数定義すること。例えばprint(int)とprint(String)を別々に定義するのがオーバーロード。

ひよこ ひよこ

おもしろい!ダックタイピングとポリモーフィズムは同じ?

ペンギン先生 ペンギン先生

目指す結果は似てるけど仕組みが違う。ポリモーフィズムは継承インターフェースによる「型の階層」が前提。ダックタイピングはPythonJavaScriptのように「同じメソッドを持っていれば型が違っても同じように扱える」考え方で、継承関係を必要としない。「アヒルのように歩いてアヒルのように鳴くなら、それはアヒルだ」という発想からの名前なんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ポリモーフィズムって出てきたら「同じ呼び方でも型によって動きが変わる」と思えばだいたいOK!
📖 おまけ:英語の意味
「Polymorphism」 = 多様な形・多態性
💬 ギリシャ語の「poly(多くの)+ morphe(形)」から。1つの名前が多くの形(動作)を持つという意味
← 用語集にもどる