Javaのインスタンスの型を調べるサンプルです。
instanceof演算子を使用します。
目次
instanceof演算子
| 1 変数 instanceof クラス名 2 変数 instanceof インターフェース名 |
以下の時、trueを返します 。
- 変数が参照しているインスタンスは、クラス名のインスタンスである。
- 変数が参照しているインスタンスは、クラス名のサブクラスのインスタンスである。
- 変数が参照しているインスタンスは、インターフェース名の実装クラスのインスタンスである。
- 変数が参照しているインスタンスは、インターフェース名の実装クラスのサブクラスのインスタンスである。
変数がnullの時は、falseを返します。
instanceof演算子の右辺がクラスの場合
instanceof演算子の右辺がクラスの場合のサンプルです。
6行目のクラスは3行目のクラスを継承しています。
12行目は、親クラスのインスタンスを生成しています。
14行目、変数taが参照しているインスタンスは、TestAクラスのインスタンスか→true
16行目、変数taが参照しているインスタンスは、TestBクラスのインスタンス or TestBクラスのサブクラスのインスタンスか→false
package test1;
class TestA {
}
class TestB extends TestA {
}
public class Test1 {
public static void main(String[] args) {
TestA ta = new TestA();
System.out.println(ta instanceof TestA); //true
System.out.println(ta instanceof TestB); //false
}
}
以下のコードは、上記と同じく6行目のクラスは3行目のクラスを継承していますが、
今度は、12行目で、子クラスのインスタンスを生成しています。
14行目、変数tbが参照しているインスタンスは、TestAクラスのインスタンス or TestAクラスのサブクラスのインスタンスか→true
16行目、変数tbが参照しているインスタンスは、TestBクラスのインスタンスであるか→true
18行目、左辺がnullの場合は、falseになります。
package test1;
class TestA {
}
class TestB extends TestA {
}
public class Test1 {
public static void main(String[] args) {
TestB tb = new TestB();
System.out.println(tb instanceof TestA); //true
System.out.println(tb instanceof TestB); //true
System.out.println(null instanceof TestB); //false
}
}
instanceof演算子の右辺がインタフェースの場合
instanceof演算子の右辺がインタフェースの場合のサンプルです。
6行目のクラスは、3行目のインターフェースを実装しています。
14行目、変数taが参照しているインスタンスは、InterfaceAの実装クラスのインスタンスであるか→true
package test1;
interface InterfaceA {
}
class TestA implements InterfaceA {
}
public class Test1 {
public static void main(String[] args) {
TestA ta = new TestA();
System.out.println(ta instanceof InterfaceA); //true
}
}
以下のコードは、上記と同じく6行目のクラスは3行目のインターフェースを実装していますが、
今度は、9行目で6行目のクラスを継承し、15行目で子クラスのインスタンスを生成しています。
17行目、変数tbが参照しているインスタンスはInterfaceAの実装クラスのインスタンス or InterfaceAの実装クラスのサブクラスのインスタンスか→true
package test1;
interface InterfaceA {
}
class TestA implements InterfaceA {
}
class TestB extends TestA {
}
public class Test1 {
public static void main(String[] args) {
TestB tb = new TestB();
System.out.println(tb instanceof InterfaceA); //true
}
}
以下はOracleのThe Java Tutorialsのリンクです。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html
関連の記事
Java クラスのサンプル
Java コンストラクタのサンプル
Java クラスの変数の用語のサンプルとまとめ(メンバー変数他)
Java 参照型の変数を型変換するサンプル
Java クラスのthisのサンプル
Java インターフェースのサンプル(interface)
Java 抽象メソッドと抽象クラスのサンプル(abstract)
Java シングルトンのサンプル
Java ポリモフィズムのサンプル
Java staticメソッドとstatic変数のサンプル