多态的向下转型instanceof关键字的使用

本文探讨了在Java中如何调用子类特有的属性和方法,包括强制类型转换及其可能抛出的ClassCastException异常。通过使用instanceof关键字,可以在转换前检查对象的实际类型,避免异常。多态被视为运行时的行为,确保了程序的灵活性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述如何才能调用子类特有的属性和方法?
Man m1 = (Man)p2;
使用强制类型转换符 向下转型
在这里插入图片描述

Man m1 = (Man)p2;
m1.earnMoney();
m1.isSmoking =true;

Woman w1 = (Woman)p2;
w1.goShopping();报错
使用强转时,可能会出现ClassCastException的异常

instanceof:
a instanceof A:判断对象a是否是A的实例,如果是,返回true,如果不是,返回false
if(p2 instanceof Woman){
Woman w1 = (Woman)p2;
w1.goShooping();
System.out.println(“Woman*”)
}

if(p2 instanceof Man){
Man m1 = (Man)p2;
m1earnMoney();
System.out.println(“Man*”)
}
使用情景:为了避免在向下转型时出现ClassCastException的异常,我们在向下转型之前,先进行instanceof判断,一旦返回true,就向下转型,如果不是,返回false。

如果a instanceof A返回true,则a instanceof B也返回true
其中类 B时类A的父类

在这里插入图片描述
多态时编译时行为还是运行时的行为。
运行时行为

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值