Javaのポリモーフィズムの罠

 

自分の知識の問題なのでタイトルは大袈裟ですが、実践するまでわからなかったことなのでメモ

 

Javaにおいて、アップキャストは明示しなくても可能であるため、継承においてはスーパークラス型の変数にサブクラスのインスタンスを代入することは普通に可能です。

 

しかし、これを動かそうとするとエラーが出ます。

 

スーパークラス型の変数にインスタンスを代入してしまうとサブクラスのメソッドは呼ぶことができません。

 

動かすためにはこう

サブクラスでオーバーライドするような書き方をすれば呼び出しが可能でした。

意外とここまでちゃんと解説してるサイトは少ない気がします。

 

これこそがポリモーフィズム!