须知
- instanceof 是一个双目运算符,使用格式:
对象(引用变量) instanceof 类/接口
- 是用来在运行时判断对象是否是特定类的一个实例,如果是返回true,否则返回false。
实例
有下面几个接口和类:
public interface AInterface {
}
public class FatherClass implements AInterface {
}
public class SonClass extends FatherClass {
}
public class OtherClass implements AInterface {
}
对应的关系图如下:
具体实例如下:
-
用接口做引用类型,用子类做实例对象
// 接口引用,子类实例 AInterface af = new SonClass(); System.out.println(af.getClass());// class com.hqq.instance_of.SonClass System.out.println(af instanceof AInterface);// true System.out.println(af instanceof FatherClass);// true System.out.println(af instanceof SonClass);// true
-
用父类做引用类型,用子类做实例对象
// 父类引用,子类实例 FatherClass fc = new SonClass(); System.out.println(fc.getClass());// class com.hqq.instance_of.SonClass System.out.println(fc instanceof AInterface);// true System.out.println(fc instanceof FatherClass);// true System.out.println(fc instanceof SonClass);// true
-
用子类做引用类型,子类做实例对象
// 子类引用,子类实例 SonClass sc = new SonClass(); System.out.println(fc.getClass());// class com.hqq.instance_of.SonClass System.out.println(sc instanceof AInterface);// true System.out.println(sc instanceof FatherClass);// true System.out.println(sc instanceof SonClass);// true
-
接口做引用类型,父类做实例对象
// 接口引用,父类实例 AInterface a = new FatherClass(); System.out.println(a.getClass());// class com.hqq.instance_of.FatherClass System.out.println(a instanceof AInterface);// true System.out.println(a instanceof FatherClass);// true System.out.println(a instanceof SonClass);// false
-
用接口做引用类型,other类做实例对象
AInterface ai = new OtherClass(); System.out.println(ai.getClass());// class com.hqq.instance_of.OtherClass System.out.println(ai instanceof AInterface);// false System.out.println(ai instanceof FatherClass);// false System.out.println(ai instanceof SonClass);// false System.out.println(ai instanceof OtherClass);// true
总结
instanceof
运算符的前一个操作符是一个引用变量(指向一个对象),后一个操作数通常是一个类(可以是接口)- 用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。也就是说:前面的对象,是后面:接口的实现类的对象、或者类本身的对象、或者类的子类的对象,就会返回true,否则返回false