如何才能知道一个父类引用的对象,本来属于哪个类的?
为解决这个问题我们使用instanceof关键字进行判断,格式为对象名 instanceof 类名称,这将会得到一个boolean值的结果,表达的含义是判断前面的对象是不是属于后面这个类的。
举例解释如下:
① 这里设情景有一个Animal类作为父类;
② 有一个Dog类作为Animal类的子类,其中含有watchHouse()这个方法;
③ 还有一个Cat类也作为Animal类的子类,其中含有catchMouse()这个方法
Animal animal = new Cat(); //向上转型
if (animal instanceof Dog){ // 判断animal对象是否原来是属于Dog类
Dog.dog = (Dog)animal;
dog.watchHouse();
}
if (animal instanceof Cat){ // 判断animal对象是否原来是属于Cat类
Cat cat = (Cat)animal;
cat.catchMouse();
}
那么这里我们会有一个疑问!
明明是我们自己写的向上转型的语句,为什么我们还要判断它原先属于什么类?
这里我们再举一个例子:
假设一个情景,你的女朋友让你给她买个宠物,但是没有说要什么宠物,但是无论你给她买了什么宠物最终都要让它发挥它自己的特殊作用
public static void giveMeAPet(Animal animal){
/* giveMeApET是给女朋友一个宠物的方法,
参数传一个动物类作为参数,
这里作为女朋友他是不知道你会给她买什么类型的宠物的
*/
if (animal instanceof Dog){ // 当你给他买的动物属于狗的话会执行他自己独有的方法,发挥这个动物自己特殊的作用
Dog.dog = (Dog)animal;
dog.watchHouse();
}
if (animal instanceof Cat){ // 当你给他买的动物属于猫的话会执行他自己独有的方法,发挥这个动物自己特殊的作用
Cat cat = (Cat)animal;
cat.catchMouse();
}
}
由此可见在上面这个情景中,虽然在编写代码的时候我们知道我们编写的向上转型原来的类是什么,但是在某些情景下,即使我们知道原来的类属于什么,但是别人是不知道,这个时候我们就需要用到instanceof关键字进行判断了。