前回ダウンキャストの説明が途中でしたのでまずはそこからwww
次のように
スーパークラスのオブジェクトを キャスト すればコンパイルエラーにならずに
サブクラスの型の変換に代入できます。キャストは強制的な型変換です。
Student student = (Student)(new Member("田中 宏"));
コレはできるというだけです。コンパイルが通っただけで、実行するとエラーの確率が高いですwww
多くの場合、プログラムを実行すると不正な型変換をしたという実行時例外が発生します。
これは、サブクラス型へのキャストでダウンキャストといいます。
ダウンキャストは危険な操作なので避けなければいけない!
というところまで説明しました。
で、次のようにもともと変数memberにStudent型のオブジェクトが入っていた場合はダウンキャストしてもよいケースです。
Student student = (Student)member;
//ダウンキャスト
この時、変数memberに入っているオブジェクトが本当にStudent型かどうか調べたうえでキャストできれば安全です。
そのために使用するのがinstanceof演算子です。
instanceof演算子は、変数の中にあるオブジェクトの型を次の書式で調べることができます。
package sample18_02;
public class Exec {
public static void main(String[] args) {
Object obj = new Member(118, "田中 宏");
System.out.println(obj instanceof Object);
System.out.println(obj instanceof Member);
System.out.println(obj instanceof Student);
}
}
で、実際にやってみるとプログラムはこんな感じです。
コンソールにはこう表示されます。
図で説明すると次のようになります。
ここまでご覧いただきありがとうございました。
参考書は__________________________________
川場 隆 Kawaba Takashi
秀和システム
______________________________________
BY マんタ