自己对于java多态的理解

个人对多态的理解。

首先多态是面向对象三大特征中最重要的一种特征,多态可以体现方法层面,方法层面的多态由重载和重写实现;另外多态最重要的体现在变量层面,可以使用一个父类的引用变量指向任何的子类对象,从而实现引用动态绑定机制。

在这里插入图片描述

在这个动物类中我们可以看出,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行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值