トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

すっきりわかるJava入門を読む⑥(13章多態性)

 今回は多態性

bibinbaleo.hatenablog.com

ざっくりとらえるためのもの

人間がどんな車もすぐに運転できるのは、どの車もハンドルとブレーキ操作が大体同じだから。ロボットにやらせるなら、細かく教えないといけない。

ちなみに私は乗ったことのない車の操作はしたくないです。レンタカー(しかもプリウス)を初見ですぐに運転できてた先輩はすごすぎる。

スッキリわかるJava入門 第2版 (スッキリシリーズ)

書く

普通インスタンス化するときは

SuperHero h = new SuperHero();

のように同じ型の変数にインスタンスを入れる。

多態性

Character c = new SuperHero();

みなしてほしい型に入れる。

嘘はダメ

extendsやimplementsでis-aの関係になっているものに入れられる。

抽象クラスを型として使える

抽象クラスはインスタンス化できないけど、型としては使える。

Life lf = new Cat();

その他

入れた箱のメソッドしか呼べない

動きは中身のメソッド

 

あいまいな型に入っている中身を厳密な型に無理やり代入する

Character c =new Wizard();

Wizard w = (Wizard) c;

嘘だと爆発する

 

嘘かどうか事前に判定する。

if ( c instanceof SuperHero){     ////trueだったら

SuperHero h = (SuperHero) c;

}

メリット

似たようなメソッドに同じ処理をするときに楽。

様々な職業のキャラクター達をcharacterだとざっくりみなして、同じ配列に入れ、ループを回して同じ処理ができる。

コードの重複が減る

 

また同じRun()という指示を1行書いても、それぞれのキャラによって定義されたRun()をする。

呼び出される側は、自分に決められた動きをする。

Unity

多態性ポリモーフィズムというらしい。

unity3d.com