多态的缺点和解决方法

多态的缺点以及解决办法
*

  • 缺点: 通过多态的父类引用无法访问子类所特有的方法

  • 向上转型(自动转换)
    格式:<父类型> <引用变量名> = new <子类型>();
    特点:
    子类转为父类 父类的引用指向子类对象。自动进行类型转换
    此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法
    此时通过父类引用变量无法调用子类特有的属性和方法
    向下转型(强制转换)
    格式:<子类型> <引用变量名> = (<子类型> )<父类型的引用变量>;
    特点:
    父类转为子类,父类引用转为子类对象。理解为强制类型转换
    在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

    C l a s s C a s t E x c e p t i o n \color{red}{ClassCastException } ClassCastException
    异常名称: 类型转换异常
    产生原因: 在向下转型的过程中没有转换成真实的类型
    解决办法: 对父类的所有子类做逐一类型判断

  • i n s t a n c e o f 关 键 字 \color{red}{ instanceof关键字 } instanceof

  • 格式: 左边对象 instanceof 右边类

Fu f=new Zi();
if(f instanceof Fu)
{
******
}
  • 作用: 判断左边对象是否属于右边类的实例, 是 返 回 t r u e , 不 是 返 回 f a l s e \color{red}{是返回true,不是返回false } true,false

  • 目前我们知道使用向下转型 + instanceof关键字能够解决多态的缺点

  • 但是我们清楚 如果需要对父类的所有子类做逐一判断,可能存在安全隐患或者违反开闭原则

  • 但是还有一个Object类,该类有无数个子类,所以如果父类引用是Object,那么安全隐患永远存在

  • 后期使用泛型改进

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值