instanceof 演算子

x instanceof Y    // true か false

trueを返す条件

  1. 参照型変数xがクラスYのインスタンスを参照している
  2. 参照型変数xがクラスYのサブクラスのインスタンスを参照している
  3. 参照型変数xがインタフェースYを実装しているクラスのインスタンスを参照している


スーパクラスHoge とそのサブクラスSubHogeがあるとき、

  1 public class Main {
  2   public static void main(String[] args) {
  3     Hoge h = new Hoge();
  4     SubHoge sh = new SubHoge();
  5 
  6     System.out.println(h instanceof Hoge);     //条件1にあてはまる   true
  7     System.out.println(sh instanceof SubHoge); //条件1にあてはまる   true
  8     System.out.println(sh instanceof Hoge);    //条件2にあてはまる   true
  9 
 10   }
 11 }


interfaceのInと、それを実装しているクラスInTerがあるとき、

  1 public class TestIn {
  2   public static void main(String[] args) {
  3     InTer it = new InTer();
  4     System.out.println(it instanceof Inter);  // 条件1にあてはまる    true
  5     System.out.println(it instanceof In);     // 条件3にあてはまる    true
  6   } 
  7 }


抽象クラスAbと、その実装クラスAbabがあるとき、

  1 public class TestAb {
  2   public static void main(String[] args) {
  3     Abab ab = new Abab();
  4     System.out.println(ab instanceof Abab);  // 条件1にあてはまる true
  5     System.out.println(ab instanceof Ab);    // 条件3にあてはまる true
  6   }
  7 }