多态
黑马程序员Java零基础视频教程_上部
面向对象的三大特征:封装,继承,多态。
封装
封装数据,提供对应行为
多态
多态的应用场景
通用方法,既方法的形参是多个类的父类类型
什么是多态
同类型的对象,表现出来的不同形态
多态的表现形式
父类对象 对象名称 = 子类对象;
![](https://img-blog.csdnimg.cn/img_convert/efc5de264aab46f3416cc1c90297792f.png)
多态的前提
有继承或实现关系
有父类引用指向子类对象
有方法的重构
![](https://img-blog.csdnimg.cn/img_convert/793c376bc185bb7f8f953b98f7853209.png)
![](https://img-blog.csdnimg.cn/img_convert/1170a889f5abd3f2cb91456749ac8c6f.png)
![](https://img-blog.csdnimg.cn/img_convert/0dfb5e8818f009c316decbe007dd9272.png)
![](https://img-blog.csdnimg.cn/img_convert/db623e408e300968bcde6ff0447f233f.png)
![](https://img-blog.csdnimg.cn/img_convert/6edcbbbaead646006690a15ad8432d23.png)
多态调用成员方法的特点
变量调用:编译-左边,运行-左边(编译看父类中是否有该变量,运行父类中的变量值)
方法调用:编译-左边,运行-右边(编译看父类中是否还有该方法,运行子类中重写的方法)
![](https://img-blog.csdnimg.cn/img_convert/8b3bc2796c158bb9fbcec307326d4f41.png)
![](https://img-blog.csdnimg.cn/img_convert/6255865152222995d46f694d6e2479b7.png)
多态的好处
在多态形式下,右边对象可以实现解耦合,便于扩展和维护
定义方法时,使用父类作为参数,可以接受所有子类对象
多态的弊端
不能调用子类特有方法(虚方法表中没有就不能被调用)