向上转型与向下转型

向上转型,将子类型隐藏。就不能使用子类的特有方法了

比如 有一个抽象类Animal  有eat()方法,类Pig 继承了Animal,复写了eat()方法之外,还定义了自己独有的sleep()方法。
此时 如果 创建Pig的实例,并将类型向上转型为 Animal,将不能访问Pig类的sleep方法,而只能访问父类 Animal定义的方法。

那么如何让实际上是内容是 Pig类型的引用A 访问 Pig 类独有的方法呢,此时就需要向下转型

 

向下转型

Pig pig = Pig(A);
强制将A转化为Pig类型,这样就能访问A的sleep()方法了,(当然前提是A确实是一个Pig类型的实例)

如果 有个Dog 类也继承了Animal类,此时你讲一个Dog类的实例向下转型为Pig,

这将会在运行期而不是编译器报错,
报错的类型是 Pig cannot be cast to Dog  ,也就是类型转化出错了。

所以,向下转型时最好用到一个 关键字 instance

instanceof :用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前用于健壮性的判断。

比如 (A instanceof Pig){…..}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值