防止类转换异常问题:用instanceof关键字进行类型判断

如何才能知道一个父类引用的对象,本来属于哪个类的?

为解决这个问题我们使用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关键字进行判断了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值