【Java学习】多态

ops/2025/2/22 10:29:56/

目录

一、方法相同

二、方法重写

1.概念

2.条件

三、向上转型

1.概念

2.方式

四、方法绑定

五、多态

一、方法相同

方法相同要求方法名相同、参数列表相同、返回值类型相同(与两方法修饰的访问限定符相不相同、静态非静态状态相不相同无关),而且在子类与父类相同的方法中,子类那边方法的访问权限必须大于等于父类那边方法的访问权限

二、方法重写

1.概念

重写是由子类类变量引用赋给父类类变量引用后父类类变量引用里对原子类类变量里重写方法的选择去调用


2.条件

父类与子类中相同的方法符合存在的情况下,如果子类的方法是非静态的,再加上父类的方法符合以下条件则能实现子类对父类方法的重写:

  • 父类的那个要被重写的方法必须也是非静态的
  • 并且在父类的非静态方法中构造方法不能被重写

父类的构造方法的方法名必须与父类类名相同,子类的构造方法的方法名必须与子类类名相同,在子类那边的构造方法要重写必须方法名相同要与父类类名相同,在子类里不能实现它的这个构造方法,所以父类的构造方法不能重写

  • 父类那个要被重写的方法必须是要被直接对应的,不能被private修饰被包装
  • 父类那个要被重写的方法不能被定义为确定最终执行方法,不能被final修饰
  • 父类那个要被重写方法的返回类型要与子类重写方法的返回类型相同也可以呈继承关系的不同

三、向上转型

1.概念

子类类变量引用转类型为父类类变量引用就是向上转型

子类的似复刻变量的引用用父类的类变量来接时,父类类变量引用接收后所指向的似复刻变量变为了用父类类变量创的似复刻变量,如果子类那边有对应实现的重写方法,路径信息上还有多加子类类变量的重写方法路径信息在调用父类类变量的那个被重写的方法时会转为访问调用对应的子类重写的方法,除此之外子类类变量创的其它剩余下的似复刻变量部分引用的权限没有消失而是被隐藏,可通过对此父类类变量引用类型强转回子类类变量引用类型获取回子类类变量那边的被隐藏的权限,获取回子类类变量原本的全部访问权限(隐藏式父类类变量引用转回其子类类变量引用即向下转型)


2.方式

子类类变量引用是可类型安全地转为父类类变量引用的,此转类型不会丢失数据,是安全允许的可直接接转来转类型的,有赋值接转形参接转返回值类型接转

(向上转型是收敛式隐藏的减法减得多减得少都不会出什么事,而向下转型是加法,如果加的加上原来不属于它的就出错了,所以向下转型是不安全的,类型转换需要强转)


四、方法绑定

绑定即对方法多个选择的确定

  • 调用重载的方法时,方法名相同的方法有多个,在编译时根据传参情况确定下要调用的方法,即静态绑定
  • 调用重写的方法时,要调用的方法子类与父类都有且相同,在执行时根据重写的对象确定要执行的那个方法,即动态绑定

一个方法先经静态绑定后经动态绑定,最终确定要执行的方法

方法重载在同一个类中实现,方法重写在不同类即父类与子类中实现

五、多态

一个方法不同对象截然不同调用效果,这个父类方法是多态的能够实现根据对象自动选择调用对应方法,即一个父类方法不同子类对象自动对应上各自子类方法解决方法调用时选择哪个方法调用的选择问题,全部直接对它调用,不用自己判断选择调用了


http://www.ppmy.cn/ops/160491.html

相关文章

Linux基础 -- 中断子系统之级联中断

Linux 级联中断 (irq_set_chained_handler_and_data) 详解 1. irq_set_chained_handler_and_data() 介绍 1.1. API 定义 void irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handler, void *data);参数 irq:需要绑定处理函数的中断号&…

批量给文本中的每行内容加入一行空行

我这里有一个txt的文本内容要处理。需要每6行加入一行空行。 我们可以考虑用python脚本去实现。但是python脚本还要下载python。然后安装以后用cmd去运行python脚本。对不是技术党来说不友好。 我们考虑用现成的notepad工具去实现。首先下载一个notepad的软件。 然后。 用no…

ICRA2024:CoLRIO,用于机器人群体的激光雷达测距-惯性集中状态估计

文章目录 摘要I. 引言II. 相关工作A. 激光雷达惯性里程计B. 多机器人定位和映射 III. 相对状态估计框架A. 单个机器人前端B. 群体定位 IV. 实验V. 结论 摘要 摘要 —— 使用不同异构传感器进行协作状态估计对于在无GPS环境中运行的机器人群体来说是一个基本前提,这…

Windows使用docker部署fastgpt出现的一些问题

文章目录 Windows使用docker部署FastGPT出现的一些问题1.docker部署pg一直重启的问题2.重启MongoDB之后一直出现“Waiting for MongoDB to start...”3.oneapi启动不了failed to get gpt-3.5-turbo token encoder Windows使用docker部署FastGPT出现的一些问题 1.docker部署pg一…

如何设计提示词让AI以思维链方式回答问题

什么是思维链(Chain of Thought, CoT)? 思维链 (CoT) 是一种提示技术,它引导语言模型逐步思考问题,模拟人类的思考过程。与直接给出答案不同,CoT 提示会让模型在给出最终答案之前,先展示一系列…

Three.js 快速入门教程【一】开启你的 3D Web 开发之旅

系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…

DeepSeek破局启示录:一场算法优化对算力霸权的降维打击

导言 2024年,中国AI大模型赛道杀出一匹黑马——深度求索(DeepSeek)。从数学推理能力超越GPT-4,到API价格仅为Claude 3.5的1/53,再到开源生态的快速扩张,DeepSeek的崛起不仅打破了“算力霸权”的固有认知,更揭示了AI行业底层逻辑的深刻变革。这场技术革命背后,隐藏着技术…

Android TabLayout 实现随意控制item之间的间距

效果 红色标注是不同的间距。 实现方式 1、xml中定义 <com.google.android.material.tabs.TabLayoutandroid:id"id/tab_layout"android:layout_width"wrap_content"app:tabIndicatorColor"color/color_FF00B2E3"app:tabBackground"a…