アップキャストとダウンキャスト

・アップキャスト
「サブクラスの型参照を、スーパークラスの型参照へキャストすること」
100%成功するので安全。
・ダウンキャスト
「スーパークラスの型参照を、サブクラスの型参照へキャストすること」
実体によってはキャストに失敗するので、非安全。
以下、SuperClassを継承したSubClassが存在した場合の例。

SuperClass superCls = new SubClass();
SubClass subCls = new SubClass():
//アップキャスト.これはコンパイルエラーはでない.キャストも失敗しない.
SuperClass superCls2 = subCls;
// 実体は同じだが、コンパイル時に型が違うことがわかるので、コンパイルエラーになる.
SubClass subCls2 = superCls;
// ダウンキャスト.実行するまで実体はわからないのでコンパイルエラーにはならない.
// superClassの実体がSubClassならば実行時もパス.
// そうでない場合はClassCastExceptionがスローされる.
// この例ならば、superClsの実体はSubClsなので実行時もパス。
SubClass subCls3 = (SubClass)superCls;

※詳細はプログラミング言語Java第4版 79ページ、3.4.2 明示的な型キャストを参照のこと。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です