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

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

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

相关推荐
Flynn Liang8 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪9 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息9 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼10 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff11 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff11 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
David猪大卫11 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger12 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
SL_staff12 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品
nice_lcj52013 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发