【尚硅谷-Java学习】5.5向下转型 及 instanceof

应用多态性时:Person p1 = new Man();堆中的对象是具有子类Man的所有结构(属性、方法)的,只是由于创建的对象p1声明为父类Person类型,导致编译时只能调用父类声明的属性和方法,无法调用子类特有的方法、属性。

多态性也称为向上转型:将子类转换成父类。

那么如何才能调用子类特有的属性和方法?

向下转型(强制类型转换):将父类转换成子类

Person p1 = new Man();
Man m1 = (Man)p1;

1.存在风险

基本数据类型的强制转换存在精度损失,那么向下转型有什么风险呢?

例如下面代码在运行时会出现ClassCastException类型转换错误。

Person p1 = new Man();
Woman w1 = (Woman)p1;

2.使用 instanceof 避免风险

a instanceof A判断对象a是否是类A的实例。返回boolean类型。

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

3.向下转型的前提

A a1 = new B();
C c1 = (C)a1;

多态性:A可以是B的 父类 或 父类的父类。
向下转型:C是 类B 或 类B的父类 或 父类的父类。

例如

Object o1 = new Man();
Person p1 = (Person)o1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值