java中,instanceof运算符的前一个操作符是一个引用变量,后一个操作数通常是一个类(可以是接口),用于判断前面的对象是否是后面的类,或者其子类、实现类的实例。如果是返回true,否则返回false。
instanceof关键字做判断时,instanceof操作符的左右操作数必须有继承或实现关系。
例如下面的继承树:
由上面继承树可知,某个类(接口也可以看成一个特殊的类)的对象是不是其他类(或接口)的实例,只需按箭头方向,以此对象所在的类为起点到达此继承树分支(可能有多个分支)终点,沿途经过的类(包括本类,或接口)就都是该对象的实例。
在判断某个类(接口也可以看成一个特殊的类)的对象是不是其他类(或接口)的实例,一定要首先进行向上转型,然后才可用instanceof关键字进行判断,这是基本操作规范。
interface A{
void say();
}
class B implements A{
public void say()
{
System.out.println("B实现的say()方法");
}
}
class C implements A{
public void say()
{
System.out.println("C实现的say()方法");
}
}
public class TestDemo{
public static void main(String[] args) {
A a= new B(); //接口不能new
System.out.println(a instanceof B); //true;发生了A a= new B();
System.out.println(a instanceof C); //false;没有发生A a = new C();
}
}
在判断接口A的对象a 是不是类C的实例时,没有先进行向上转型,就进行instanceof关键字的使用了,是肯定会返回false的。