多态

多态,同一个对象的行为,不同条件,表现不同的效果

实现多态的三个条件

  • 继承
  • 方法覆盖
  • 父类引用指向子类实例(对象)

成员变量
编译看左边,运行看左边,也就是引用类型
编译看左边,因为需要通过引用变量的值也就是地址去堆中的去操作
人看电视用遥控器,我们使用电视机的功能被遥控器所限制

每一个new都是披上了父类的马甲,所以具有父类的外貌特征,所以是拥有属性

成员方法
编译看左边,运行看右边,也就是引用变量实际指向的对象类型

运行结果,由于多态指向了实际的对象方法

多态的弊端

无法通过父类引用使用子类独有的方法,可以使用引用类型转化,条件必须是具有父子类型的引用变量

将子类引用转换成父类引用,向上转型,默认允许

Duck duck = new Duck();
Animal animal = duck;

将父类引用转换为子类引用,向下转型

Animal animal = new Animal();
        Duck d = (Duck) animal;

这样不行,是虚假的,我们需要实际上就将animal指向duck

Animal animal = new Animal();
        animal = new Duck();
        Duck dd = (Duck) animal;
        collectAnimalStudy(dd);

instanceof

帮我们判断一个对象的实际类型是否是目标类型

animal instanceof Duck

instanceof 看的是实际的有没有,所以下面这个代码会false
Animal animal = null
animal instanceof Duck
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值