オブジェクトの代入 その4Advertisementinstanceof
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!ログール |