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 親子クラス/インターフェースの代入(キャスト)