java多态

多态的概念
通俗的来说,就是多种形态,具体指:去完成某个行为,当不同对象去完成时产生不同的状态
想要理解多态就需要了解
1.向上转型
2.子类和父类 有同名的覆盖/重写的方法
3.通过父类对象 调用父类和子类重写的方法。
4.满足以上三点 只能说明会发生动态绑定
5.什么是动态绑定,什么是静态绑定?
6.综上所述,才能理解什么是多态?----多态是一种思想,但很抽象。
多态实现条件
1.必须在继承体系下
2.子类必须要对父类方法进行重写
3.通过父类的引用调用重写的方法
多态体现:在代码运行时,当传递不同类对象时,会调用对应类的方法
向上转型
目的:将子类类型给到父类类型
继承:对共性进行抽取,让子类类型继承父类类型
有三种方法可以发生向上转型
方法1:直接赋值


我们可以看到一般来说,Animal类对应创建Animal对象。但在这里Animal却创建了Dog对象,这种情况叫做 向上转型****此时我们可以引用父类里面的成员变量, 但无法引用子类中的成员变量,以及成员方法。

当我们在父类与子类发生方法重写时,则可以引用子类的方法

父类的方法与子类的方法发生了重写
方法2:方法传参

我们可以自己写一个方法---将dog对象传给func方法,让 Animal类型的animal接收。也可以做到向上转型。
方法3:返回值向上转型

方法重写:


****动态绑定:在编译前时候认为Eat()方法是animal.Eat()的,但当编译时发现,子类Dog与父类的Eat()方法发生了重写,所以调用了子类Dog的Eat()方法。
****静态绑定:例如:方法的重载,在编译的时候就已经通过方法的参数,确定好调用哪个方法了。
重写注意事项:
1.被private修饰的方法不能重写
2.被static修饰的方法不能重写,被static修饰后叫做类,重写方法依赖对象
3.被final修饰的方法不能重写,此时这个方法叫做"密封方法"
4.子类的访问修饰权限要 >= 父类的访问修饰权限
5.方法的返回值可以不同但必须是父子类关系【父子类关系专业名词:协变类型】

思考题:重写与重载的相同点与不同点?
重写的作用:若干年前的手机只能打电话,而如今的手机在打电话的基础上还能录音,显示地区,视频通话等等。而在这个变化的过程中,我们不应该在原来的类上进行修改,因为原来的类还有用户在使用------正确的方法是:新建一个手机的类对这个功能进行方法重写,使得新方法能使用旧方法的属性,这样就达到我们的需求了。
12.4向下转型
将父类类型给子类(不安全!!!!)
12.5多态的优缺点

【使用多态的好处】
1.能降低代码的 圈复杂度 ,避免使用大量的if-else

如果不基于多态,实现代码如下:

基于多态,实现代码如下:

相关推荐
一定要AK4 小时前
Spring 入门核心笔记
java·笔记·spring
A__tao4 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢4 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
_dindong4 小时前
cf1091div2 C.Grid Covering(数论)
c++·算法
KevinCyao4 小时前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
lly2024064 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨4 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9994 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4944 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode