介绍
- 格式:a instanceof B,其中a是一个variable(设a所指向的对象的类型命名为A,即A是一个type。
- 功能:判断A是否 is-a B。
- 当a=null时,始终返回false。
- 当B=Object时,始终返回true。
可能返回的结果
- true:A is-a B。
- false:
- B是一个类时,A和B在一棵继承树,但是A is-not-a B。
- B是一个接口时,A不是final的,A is-not-a B(不要求A和B要在一棵继承树上)。
- Compile Error
- B是一个类时,A和B不在一棵继承树上,则Compile Error。
- B是一个接口时,如果A是final的且A和B不在一棵继承树上,则Compile Error。
实验一:接口的情况
1 interface A{}
2 class B implements A{}
3 class C{}
4 final class D{}
5 class Demo01
6 {
7 public static void main(String args[])
8 {
9 B b = new B();
10 C c = new C();
11 D d = new D();
12 System.out.println(b instanceof A); //true
13 System.out.println(c instanceof A); //false
14 System.out.println(d instanceof A); //Compile Error:不可转换的类型
15 }
16 }
实验二:类的情况
1 public class Instanceof01
2 {
3 public static void main(String[] args) {
4 A a = new A();
5 A b = new B();
6 System.out.println((a instanceof B)); // A isn't-a B,因此输出false
7 System.out.println((b instanceof A)); // B is-a A,因此输出true
8 System.out.println((b instanceof B)); // B is-a B,因此输出true
9 System.out.println((a instanceof C)); // Compile Error:不可转换的类型,因为类A和类C不在一棵继承树上
10 }
11 }
12 class A{}
13 class B extends A{}
14 class C{}