・アップキャスト
「サブクラスの型参照を、スーパークラスの型参照へキャストすること」
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 明示的な型キャストを参照のこと。
コメントを残す