SJC-P対策 演算子
instanceof演算子はオブジェクト参照変数を比較するのに使う。
つまり、参照変数の型をチェックするだけの事。
ちなみに、比較するオブジェクト参照変数が、
ダウンキャスト可能か調べる事も出来る。
Javaの配列は常にオブジェクト型である。
. . //この場合は、strが文字列型かどうか調べる処理。 //型が同じなら、真となる。 String str = ""; if (str instanceof String) {} . . . // ダウンキャスト可能か調べる class A {} class B extends A { public static void main(String args[]) { A a = new B();//Aのサブクラスのインスタンスを参照 if(a instanceof B) ((B)a).put();//ダウンキャストする } public static void put(){ system.out.println("class is B"); } } |
class is B
|
SJC-Pの試験では、オブジェクトのクラスがインターフェースの間接的に
実装しているかどうかを調べるために、instanceof演算子を
使った問題が出題される事が有る。
この場合は、オブジェクトのクラスが間接的にインターフェースを
実装していれば、結果は真となる。
public interface HogeHoge {} public class Foo implements HogeHoge {} public class FooHoge extends Foo {} . . . FooHoge var = new FooHoge(); if(var instanceof HogeHoge){} //真となる |
配列は常にオブジェクト型である。
int [] arr = new int[10]; if(arr instanceof Object) {} //真... |
あるクラスから派生した、サブクラス同士を
instanceof演算子で比較する事は出来ない。
class Dog {} class Cat { Cat cat = new Cat(); if(cat instanceof Dog) {} //コンパイルできない |