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)父类引用指向子类对象