1、动态多态性是指运行时的多态

在这里插入图片描述


2、调用的是引用所指对象中的方法

在这里插入图片描述

在这里插入图片描述
动态绑定的时候,调用的某一个方法是所指对象的方法,而不是引用的方法。


3、例题1:

在这里插入图片描述

在这里插入图片描述

内存图

在这里插入图片描述

(1)刚开始c是Cat类型的引用,生成了一个Cat类型变量,d是Dog类型的引用,生成了一个Dog类型的变量,所以内存图中指向的是整个边框的外侧,但是当Girl类型的l1的时候,Pet类型的引用指向了Cat类型变量,因为Pet是父类,Cat是子类,所以只能看到子类中父类所拥有的变量,也就是name,所以Pet指向的是大框中内部name的小框,l2同理。l1在调用pet.cry()的时候,调用的是pet所指对象中的cry(),虽然看到的只是name这一部分,但是所指向的对象还是Cat,所以调用的是Cat中的cry()方法, l2同理。

(2)如果要是再加一种宠物的话,不需要对Gril中的代码进行修改,只需要新建一个类,然后让这个类继承与Pet,这样实现了可扩展性,是面向对象的核心技术。


4、例题2:

在这里插入图片描述

修改方式,通过多态实现

在这里插入图片描述

在这里插入图片描述

这样的话,就可以通过每一个类,自己输出自己的特有属性。

在这里插入图片描述

5、使用多态的条件是什么呢?
(1)继承于父类
(2)有方法重写
(3)父类引用指向子类对象

相关文章:

  • 2021-10-16
  • 2021-09-15
  • 2021-09-15
  • 2021-10-16
  • 2021-10-16
  • 2021-10-16
猜你喜欢
  • 2021-10-16
  • 2020-05-06
  • 2019-12-16
  • 2019-01-09
  • 2021-11-13
  • 2019-03-21
  • 2020-06-07
相关资源
相似解决方案