ダウンキャストについてのメモ

ずーっと保留にしてたダウンキャストへの理解が多少深まったのでメモ。

ダウンキャストした際、例外が出るパターンとそうでないパターンの判別がいまいちつかなかったので拙い解釈だが書く。

①例外出力あり

// ダウンキャスト(例外出力あり)
SuperClass sp = new SuperClass();
SubClass sb = (SubClass)sp;

SuperClassクラスのインスタンスをSubClass型にキャストすると、SuperClassクラスはSubClassクラスの差分を持たないため例外が送出される。

②例外出力なし

// ダウンキャスト(例外出力なし)
SuperClass sp = new SubClass();
SubClass sb = (SubClass)sp;

SubClassクラスのインスタンスをSubClass型にキャスト。変数spが指しているのはSubClassクラスのインスタンス(の参照値)なので、それをSubClass型として扱っても何の問題もないよねという話。

Qiitaとかteratailとかの説明を読んでも以前はさっぱりだったが、今自分でまとめても同じような説明になってしまった。
そういうことにしておきましょう。