个人对多态的理解。
首先多态是面向对象三大特征中最重要的一种特征,多态可以体现方法层面,方法层面的多态由重载和重写实现;另外多态最重要的体现在变量层面,可以使用一个父类的引用变量指向任何的子类对象,从而实现引用动态绑定机制。
在这个动物类中我们可以看出,animal类包含了name属性,eat行为。
在这个dog类中,他继承了animal类,并且重写了eat行为。
如果在测试类中对象创建后,我们直接调用了a1.eat()的话相当于只对animal类创建对象输出为“拉布拉多用餐”。 对于上面创建对象,是上转型方法,即父类引用指向子类对象,它相当于访问了animal类(即为 = 之前的类,后面都可以这么思考),a2.sleep()没有报错,说明animal类中可以访问,输出为
为什么会输出dog类中的“吃骨头”呢?
因为在dog类中对于eat行为进行了重写,在调用eat方法时输出的是被重写之后的内容。但是还是访问了 = 号 之前的animal类。
这种创建对象的方法称为下转型,这种转型之前要判断能否转,不符合条件会报错,他也可以理解为访问了dog类,d.eat()会输出dog类的“吃骨头”。d.sleep()输出为“在睡觉”。
因为在dog类中没有sleep行为但是dog类继承了父类animal类中有sleep方法,所以调用了父类中的animal行为。