多态

向下转型和向上转型:

        向上指子类到父类,向下指父类到子类(要加强制类转换符)

多态机制:

        Animal A=new cat();Animal是cat的父类。这是子类转换为父类,就是向上转换,允许使用。

     编译阶段A的数据类型是Aniaml,编译通过,字节码中有相应的方法,称这个过程为静态绑定。

但是在JVM中真实创建的是cat对象,调用的方法也是cat里面的方法。这称为动态绑定。

这种现象父类型引用指向子类型对象,这种机制导致了编译和运行阶段绑定的不同,这种机制就叫多态。

如果在代码中调用了cat()中有的东西,但是Animal中没有的,那么编译就通过不了。

强制转换;

        bird B=(bird) A;

程序编译会通过,但是运行会异常。因为JVM中真实存在的是个cat类型。这称之为类型转换异常

所有向下转型存在隐患。而向上转型只要编译通过,运行就不会异常。为了避免向下转型的异常,需要使用instance运算符。语法格式;

引用 instanceof 数据类型名

返回的是布尔值,如A instanceof Animal;返回为true说明指向对象类型确实是Animal。

比如可以用if语句判断,如果是bird就用bird B=(bird)A转换,如果是cat就用cat B=(cat) A转换。

所以用instance的话就可以在运行阶段判断这个类型对不对,避免编译时的错误。转型的目的就是为了使用子类的方法,用instance来避免转换时的异常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值