BLOG
ブログ

2019.04.19

[Java] ポリモーフィズムの基礎

ポリモーフィズムとは?

 

「ポリモーフィズム」は、「多様性」や「多態性」などといわれ、カプセル化、継承に続くオブジェクト指向の三大要素の一つです。

変数の型は同じでも、オブジェクトの中身によって、メソッドの機能が異なることをポリモーフィズムと呼びます。

 

メソッドの呼び出し方法を共通にして、その上にオーバーライドした同じメソッドを呼び出した場合、インスタンスごとに違う動きをします。型が異なる変数をどのように代入しても、呼び出すオーバーライドメソッドは変わらない、オーバーライドの性質を利用しています。

 

文字ばかりでは難しいので、下記のポリモーフィズムを使ったサンプルと、使わなかったサンプルを見てみましょう。両方とも実行結果は同じです。

 

 

ポリモーフィズム無しのサンプル

 

 

 

ポリモーフィズムありのサンプル

 

実行結果(両方同じ)

 

ポリモーフィズムをありのサンプルは、引数を受け取ったインスタンスが、子クラスによって違う振る舞いをしていますね。

drive()という命令が実行されれば、受け取ったインスタンスが車であれば時速80キロで走り、新幹線であれば300キロで走ります。

船やヘリコプターといった陸路で走らない乗り物が増えようとも、Norimonoの型を持つインスタンスにdrive()を使えば、どのような乗り物でも走ることができます。

 

2行目と11行目にabstractキーワードを付けて、抽象クラスと抽象メソッドを指定してます。継承したサブクラスが正確にオーバーライドしないとコンパイルエラーになるの注意です。

 

ちなみにabstractキーワードを付けないと、サブクラスがどこからオーバーライドしたらいいか識別できなくなりコンパイルエラーになります。

 

親クラスにメソッドを宣言しておいて、子クラスでメソッドに対応した処理をすれば、それぞれのサブクラスを使用する際に、一つのメソッドだけを覚えれば済みますね。