Java instanceof インスタンスを調べる

Javaのinstanceof演算子で、インスタンスを調べるサンプルです。

目次

サンプル instanceof演算子とは
  右辺がクラス+クラスのインスタンスを判定
  右辺がクラス+サブクラスのインスタンスを判定
  右辺がインタフェース+クラスのインスタンスを判定
  右辺がインタフェース+サブクラスのインスタンスを判定

instanceof演算子とは

変数 instanceof クラス
変数 instanceof インターフェース

以下の時、trueを返します 。

  • 変数が参照しているインスタンスは、クラスのインスタンスである。
  • 変数が参照しているインスタンスは、クラスのサブクラスのインスタンスである。
  • 変数が参照しているインスタンスは、インターフェースを実装するクラスのインスタンスである。
  • 変数が参照しているインスタンスは、インターフェースを実装するクラスのサブクラスのインスタンスである。

変数がnullの時は、falseを返します。

 

右辺がクラス+クラスのインスタンスを判定

package test1;

// スーパークラス
class Animal {
}
// サブクラス
class Cat extends Animal {
}
public class Test1 {
	public static void main(String[] args) {
		// スーパークラスのインスタンスを生成
		Animal animal = new Animal(); 

		System.out.println(animal instanceof Animal); //true
		System.out.println(animal instanceof Cat); //false
	}
}

7行目のクラスは4行目のクラスを継承しています。
12行目は、スーパークラス(親クラス)のインスタンスを生成しています。
14行目、変数animalが参照しているインスタンスは、Animalクラスのインスタンスか→true
15行目、変数animalが参照しているインスタンスは、Catクラスのインスタンス or Catクラスのサブクラスのインスタンスか→false

 

右辺がクラス+サブクラスのインスタンスを判定

package test1;

// スーパークラス
class Animal {
}
// サブクラス
class Cat extends Animal {
}
public class Test1 {
	public static void main(String[] args) {
		// サブクラスのインスタンスを生成
		Cat cat = new Cat();

		System.out.println(cat instanceof Animal); // true
		System.out.println(cat instanceof Cat); // true
		System.out.println(null instanceof Cat); // false
	}
}

12行目は、サブクラス(子クラス)のインスタンスを生成しています。
14行目、変数catが参照しているインスタンスは、Animalクラスのインスタンス or Animalクラスのサブクラスのインスタンスか→true
15行目、変数catが参照しているインスタンスは、Catクラスのインスタンスか→true
16行目、左辺がnullの場合は、falseになります。

 

右辺がインタフェース+クラスのインスタンスを判定

package test1;

// インタフェース
interface Walk {
}
// インタフェースを実装したクラス
class Cat implements Walk {
}
public class Test1 {
	public static void main(String[] args) {
		// インターフェースを実装したクラスのインスタンス
		Cat cat = new Cat();

		System.out.println(cat instanceof Walk); // true
		System.out.println(cat instanceof Cat); // true
	}
}

7行目のクラスは、4行目のインターフェースを実装しています。
14行目、変数catが参照しているインスタンスは、walkインターフェースを実装するクラスのインスタンスか→true

 

右辺がインタフェース+サブクラスのインスタンスを判定

package test1;

// インタフェース
interface Walk {
}
// スーパークラス+インタフェースを実装
class Cat implements Walk {
}
// サブクラス
class MyCat extends Cat {
}
public class Test1 {
	public static void main(String[] args) {
		// インターフェースを実装したクラスのサブクラスのインスタンス
		MyCat mycat = new MyCat();

		System.out.println(mycat instanceof Walk); // true
		System.out.println(mycat instanceof MyCat); // true
	}
}

17行目、変数mycatが参照しているインスタンスはWalkインターフェースの実装クラスCatのインスタンス or Walkインターフェースの実装クラスCatのサブクラスMycatのインスタンスか→true

関連の記事

Java入門 クラスの仕組みとサンプル
Java コンストラクタのサンプル
Java 親子クラス/インターフェースの代入(キャスト)

△上に戻る