ポリモーフィズム

アップキャストについて

ポリモーフィズムを理解する上で重要な概念の1つに「アップキャスト」があります。子クラスのオブジェクトを親クラスの型の変数に代入することを「アップキャスト」と言います。
例えば、Animal(動物)クラスがあるとしましょう。
それを継承した、DogクラスとWolfクラスがあります。
Javaのプログラムで再現すると以下のようになります。
DogクラスとWolfクラスのオブジェクトを、親クラスであるAnimal型の変数に代入しています。親クラスの変数に子クラスのオブジェクトを代入することが可能です。子クラスのオブジェクトを親クラスの型で扱うことができます。
異なる子クラスのオブジェクトを共通の親クラスの型で扱えるようになります。コードの柔軟性と再利用性が高まります。

ポリモーフィズムとは?

ポリモーフィズムとは、「呼び出し方は共通化するが、実際の振る舞いはクラス毎に変化させること」です。継承の「オーバーライド」の機能を使います。呼び出し方の共通化は親クラスで行います。クラス毎に振る舞いを変化させるのは、継承した子クラスで実装します。
Animal(動物)クラスに”bark”(吠える)というメソッドがあります。
DogクラスとWolfクラスは、どちらもbarkメソッドをオーバーライドしています。
アップキャストでAnimal型の変数dogには子クラスDogのオブジェクトを、変数wolfにはWolfクラスのオブジェクトを代入します。
dogのbarkメソッドを呼び出すと、"ワンワン"と吠えます。
wolfのbarkメソッドを呼び出すと、"ワォーン"と吠えます。
「呼び出し方は共通化するが、実際の振る舞いはクラス毎に変化させている」ということです。
このコードの全体像は以下のようになります。
親クラスAnimalのbarkメソッドを継承したDogクラスでは、barkメソッドで「ワンワン」と吠えるようオーバーライドしました。Wolfクラスでは「ワォーン」と吠えるように、barkメソッドをオーバーライドしました。
メインクラスで、それぞれのbarkメソッドを実行すると、結果はこのようになります。
ポリモーフィズムは、継承とメソッドのオーバーライド、そしてアップキャストを活用して実現されます。これにより、コードの柔軟性と再利用性が向上し、プログラムの拡張性が高まります。つまり、"変更に強いプログラム"が作成できるのです。