"instanceof" 用于判断 左侧是否为右侧的实例对象,返回值为布尔型。
简单的解释如下:
如果 A a=new A() 正确 ====》 a instanceof A 返回 true
例:
有三个类,类名以及它们之间的关系如下
Animal (Superclass) Dog(Subclass) Cat(Subclass)
则可得出如下对象
Animal animal =new Animal (); ====》animal instanceof Animal 返回 true
Dog dog=new Dog();====》dog instanceof Dog 返回 true
Cat cat=new Cat();====》cat instanceof Cat 返回 true
Animal dog=new Dog();====》dog instanceof Animal 返回 true
Animal cat=new Cat();====》cat instanceof Animal 返回 true
从上面的例子可以看出 instanceof 的书写规则 如下图:
instanceof 通常用于根据不同的实例调用不同的方法:
<1>在有继承关系的类中我们可以通过多态来调用不同实例中的不同方法:
如有实例
Animal dog=new Dog();
Animal cat=new Cat();
List list = new ArrayList();
list.add(dog);
list.add(cat);
Iterator it = list.iterator();
while (it.hasNext()) {
it.next().animalDo();
}
在这里我们可以在Dog与Cat类中重写Animal中的animalDo方法,通过调用animalDo方法,
然后会自动根据不同的实例调用不同类中的方法(多态知识)。
<2>在没有继承关系的类中,我们可以通过instanceof来判断当前实例,然后很据不同实例调用不同方法:
如有实例
ZhangSan zs = new ZhangSan();
LiSi ls = new LiSi();
YuYiHua yyh = new YuYiHua();
List list = new ArrayList();
list.add(zs);
list.add(ls);
list.add(yyh);
Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj instanceof ZhangSan) {
ZhangSan zs1 = (ZhangSan) obj;
zs1.zhangsanDo();
}
if (obj instanceof LiSi) {
LiSi ls1 = (LiSi) obj;
ls1.lisiDo();
}
if (obj instanceof YuYiHua) {
YuYiHua yyh1 = (YuYiHua) obj;
yyh1.yuyihuaDo();
}
}
在这里我们可以通过instanceof 判断结果,执行不同类中的相应动作方法(zhangsanDo()、lisiDo()、yuyihuaDo())。
一般在使用无泛型的集合(List、set等)时,比较多的使用 instanceof ,由于集合能够存各种对象,所以在读取时一般要进行相应的判断。