@634

オブジェクトの代入 その4

Advertisement

instanceof

instanceofを使うとオブジェクトが代入可能か調べることが出来る。

出来る場合、出来ない場合 の整理整頓

今回は以下の継承関係のクラス群を使う。
class A{}
class B extends A{}
class C extends A{}
class D extends B{}
図式

で、以下は正常に代入できる例。
public class ObjCast{
    public static void main(String args[]){
        A a = new D();
        D d = (D)a;
    }
}

class A{}
class B extends A{}
class C extends A{}
class D extends B{}
クラスDはクラスAから派生したクラスだから、互換性がある。代入することができる。

で、次は代入できない例。
public class ObjCast{
    public static void main(String args[]){
        A a = new C();
        D d = (D)a;
    }
}

class A{}
class B extends A{}
class C extends A{}
class D extends B{}
クラスCとDは、クラスAから派生したクラスだからクラスAとは互換性があるんだけど、クラスCとDは互換性がない。
よって、上記のようにすると、エラー。

instanceofを使う。

それで、上で見てきたように「互換性があるのかないのか」を考えるのはめんどくさい。しかも紙一重でわかりにくい。
で、それを簡単に調べるために、instanceofがある。

使い方
オブジェクト変数 instanceof クラス名
これで、オブジェクト変数が、指定したクラス名のクラスと互換性があるか調べることができる。
互換性がある場合に結果はtrueとなり、互換性がない場合はfalseとなる。(boolean型)

以下、使い方の例。代入できる(互換性がある)場合。
public class ObjCast{
    public static void main(String args[]){
        A a = new C();

        if(a instanceof D){
            System.out.println("aとDは互換性あり。");
            D d = (D)a;
        }else{
            System.out.println("aとDは互換性なし。");
        }
    }
}

class A{}
class B extends A{}
class C extends A{}
class D extends B{}
この場合の結果。
aとDは互換あり。
で、次は代入できない(互換性がない)場合の例。
public class ObjCast{
    public static void main(String args[]){
        A a = new D();

        if(a instanceof D){
            System.out.println("aとDは互換性あり。");
            D d = (D)a;
        }else{
            System.out.println("aとDは互換性なし。");
        }
    }
}

class A{}
class B extends A{}
class C extends A{}
class D extends B{}
この場合の結果。
aとDは互換性なし。
ほら、簡単。
で、結局どんな時に使うのか。おっちゃんはワカラン。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール