Java--面向对象--多态

多态的概念

同一个方法名称,执行不同的操作。方法重载就是一种多态的一种形式。

方法重写

当子类从父类中继承来的方法不能满足需要时,子类可以重写该方法,重写方法要求方法名与参数列表都相同。

因此如果子类中的方法与父类中的方法同名、并且参数类型也相同,那么子类中的方法就重写了父类中的同名方法。

为什么不直接定义另外一个方法?因为重写方法可以实现运行时多态的效果。

注意:重写只针对方法,属性没有重写概念

方法重写的规则

两同:方法名相同、参数列表相同

两小:返回值类型更小(子类)或相等、抛出的异常类更小或相等

一大:访问权限更大或相等

方法重写与方法重载的区别

只有当两个方法的名称和参数都相同时才会发生重写。如果不是都相同,那么这两个方法就只是简单的重载关系。

动态方法调度与运行时多态

动态方法调度

当通过父类引用调用重写方法时,在运行时会调用子类中的重写版本。

动态方法调用要以方法重写为前提。

Animal  a;

a = new Dog();

a.eat();  //动态方法调度:在运行时根据超类引用指向的对象确定调用哪个方法

运行时多态

运行时多态的实现机理:动态方法调度

总结:方法重写是前提、动态调度是手段、多态是最终的目的

运行时多态的优点:灵活

Animal  a;

a = new Dog();

a.eat();

a = new Cat();

a.eat();   //运行时多态:方法名相同,得到的结果不同

运行时多态的两个要素:

(1)在子类中重写超类中的方法

(2)使用超类引用调用重写方法。

在自己的类中定义的toString()方法就是重写方法。

注意不要混淆:

使用超类引用调用成员变量时,调用的是超类的成员变量。

多态的两种形式

运行时多态:动态方法调度实现

编译时多态:重载方法,编译时通过方法匹配实现的

多态实例

实例1:Animal、Dog、Cat类的eat()方法、show()方法

实例2:Person、Student、Teacher、Worker类的show()方法、eat()方法、sleep()方法

实例3:Fruit、Apple、Banana的Show()方法

实例4:Shape、Rectangle、Circle、Triangle类的area()、draw()方法

多态应用

案例1:Feeder类,喂养Dog、Cat

案例2:Manager类,管理Student、Teacher、Worker

案例3:Salesman类,卖水果

案例4:Engineer类,使用Shape类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张同学(恩师白云)

感谢您的打赏,我们一起进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值