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

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

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

相关推荐
傻啦嘿哟4 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670794 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
yxlalm4 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风5 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
李少兄5 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
码匠许师傅5 小时前
【设计模式精讲】29.行为型模式总结与对比(Behavioral Patterns Summary)
c++·设计模式·uml
Seoyoneh5 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人5 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
啦啦啦啦啦zzzz6 小时前
Logger的组装(c++20)
c++·算法·c++20
tryxr6 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务