【多态】(超级详细!)

news2024/11/18 6:45:44

【多态】(超级详细!)

  • 前言
  • 一、 多态的概念
  • 二、重写
    • 1. 方法重写的规则
    • 2. 重写和重载的区别
  • 三、多态实现的条件
  • 四、 向上转型
  • 五、动态绑定

前言

面向对象的三大特征:封装性、继承性、多态性。
extends继承或者implements实现,是多态性的前提。
这篇文章中的多态都由继承实现。

一、 多态的概念

简单来说,多态可以理解为当不同的对象去完成时会产生不同的状态
例如:在买火车票这个案例,对于普通人是全价,对于学生是半价,对于军人则是优先购买。
即:同一件事发生在不同对象身上会产生不同的结果

下面以小猫和小狗为例,帮助大家更好的理解多态。

动物食物
小猫猫粮
小狗狗粮

在这里插入图片描述

二、重写

1. 方法重写的规则

重写(override):也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, **返回值和形参都不能改变。即外壳不变,核心重写!**重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

【方法重写的规则】

  • 子类在重写父类的方法时,一般必须与父类方法原型一致: **返回值类型 方法名 (参数列表)**要完全一致。
  • 被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
    在这里插入图片描述
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected。
  • 父类被static、private修饰的方法、构造方法都不能被重写。
  • 重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心
    将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法
    构成重写。
    在这里插入图片描述

2. 重写和重载的区别

重写重载
参数个数必须相同参数个数必须不同
返回类型相同或存在父子关系返回类型可以不同
访问权限不能比父类中被重写的方法的访问权限更低访问权限可以 修改

方法重载是一个类的多态性表现,而方法重写是父类和子类的一种多态性表现。

三、多态实现的条件

  • 必须是继承关系
  • 涉及到子类对父类方法的重写
  • 通过父类的引用调用父类的方法

同样使用上述小猫和小狗吃东西的例子

1.在这里插入图片描述由上述可知:Animal是父类,Cat和Dog是子类。存在继承关系。
2.在这里插入图片描述
由上述可知:Cat、Dog类中将父类Animal中的eat()方法进行了重写。
3. 在这里插入图片描述
上述两种主方法都实现了父类的引用。

到这里有两个疑问:

  • 什么是向上转型?
  • 为什么上述父类的引用调用的是子类中的eat方法?

下面将为大家一 一解答!

四、 向上转型

向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。
语法格式:父类类型 对象名 = new 子类类型()
在这里插入图片描述

【使用场景】

  • 直接赋值
    在这里插入图片描述
  • 方法传参
    在这里插入图片描述
    方法返回
    在这里插入图片描述

注意:向上转型不能调用子类特有的方法!

五、动态绑定

在这里插入图片描述

  • 程序在编译的时候,确实调用的是父类的eat方法。

  • 当运行代码的时候,通过父类的引用,调用了父类和子类重写的那个方法,结果实际调用了子类的方法,此时我们把这种情况叫做动态绑定

通过对动态绑定的学习,我们也对多态有了新的认识:
通过调用同一个方法,表现出的现象不一样,这种思想叫做多态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1708123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DSP6657 GPIO中断学习

1 简介 使用创龙板卡的KEY2按键通过中断的方式控制LED3的亮灭 2 中断学习 在C665x设备上,CPU中断是通过C66x CorePac中断控制器进行配置的。该中断控制器允许最多128个系统事件被编程到任意12个CPU可屏蔽中断输入(CPUINT4至CPUINT15)、CPU…

手机定制开发_基于天玑900的5G安卓手机定制方案

手机定制方案基于联发科天玑900强劲旗舰八核2.4GHz处理器。这款处理器采用了6nm先进制程工艺,为用户带来了痛快淋漓的性能体验。不论是进行游戏还是日常娱乐,用户都能轻松驾驭。手机搭载了最新的Android 13操作系统,提高了数据读取的准确性&a…

sklearn线性回归--岭回归

sklearn线性回归--岭回归 岭回归也是一种用于回归的线性模型,因此它的预测公式与普通最小二乘法相同。但在岭回归中,对系数(w)的选择不仅要在训练数据上得到好的预测结果,而且还要拟合附加约束,使系数尽量小…

【电源专题】功率电感啸叫对策及案例

在文章:【电源专题】功率电感器啸叫原因及典型案例 中我们了解到了电感器啸叫的原因和一些典型电路中产生电感啸叫的案例。通过案例我们了解到很多时候啸叫来源是DC-DC转换器的功率电感器,所以如果我们要降低或消除啸叫,那有哪些对策呢? 避免流过人耳可听频率电流 首先我们…

网络业务创新驱动下的DPU P4技术,中科驭数在网络开源技术生态大会上分享最新进展

2024年5月25日,由中国通信学会指导,中国通信学会开源技术专业委员会、江苏省未来网络创新研究院主办的第四届网络开源技术生态大会在北京举办,中科驭数产品总监李冬以《合作如兰,扬扬其香 中科驭数助力P4产业发展与生态建设》为主…

Java入门基础学习笔记49——ArrayList综合案例

ArrayList的综合案例-模仿外卖系统中的商家系统 需求: 完成菜品的上架、以及菜品信息浏览功能。 目标: 使用所学的ArrayList集合结合面向对象编程实现以上两个需求。 Food类: package cn.ensource.arraylist;public class Food {private …

iptables练习题

目录 练习题1. 显示当前的iptables规则2. 允许所有来自192.168.1.0/24的TCP流量到本机的22端口(SSH)3. 禁止所有来自10.0.0.0/8的ICMP流量4. 允许所有出站流量5. 拒绝所有来自外部的HTTP流量(80端口,tcp协议)6. 删除IN…

.NET周刊【5月第4期 2024-05-26】

国内文章 开源低代码框架 ReZero API 正式版本发布 ,界面操作直接生成API https://www.cnblogs.com/sunkaixuan/p/18201175 ReZero是一款.NET6的中间件,采用MIT许可证开源,目的是降低.NET Core开发的门槛。它提供界面操作生成API的功能&am…

AI视频换脸!最快的方法,100%成功,完全免费,无需配置、打开即用

这是一款百分百完全免费,超级好用又简单的AI视频换脸工具,不仅效果非常不错而且支持CPU和GPU解码,即使电脑上没有独立显卡,你也可以通过电脑上的CPU要进解码,虽然我之前给他介绍好几个有关AI视频,比如像这个…

【全开源】酒店订单管理系统源码(FastAdmin+ThinkPHP)

一款基于FastAdminThinkPHP开发的旨在为民宿、酒店、宾馆等提供房态、订单、财务、客史等数据化、信息化的智慧管理工具,实现一站式订房管理,帮助酒店、民宿、宾馆提升管理效率,降低管理成本,提升行业竞争力。 打造高效、便捷的酒…

kafka-消费者组偏移量重置

文章目录 1、消费者组偏移量重置1.1、列出所有的消费者组1.2、查看 my_group1 组的详细信息1.3、获取 kafka-consumer-groups.sh 的帮助信息1.4、 偏移量重置1.5、再次查看 my_group1 组的详细信息 1、消费者组偏移量重置 1.1、列出所有的消费者组 [rootlocalhost ~]# kafka-…

5月28号总结

刷题记录 1.A. Phone Desktop 输入: 11 1 1 7 2 12 4 0 3 1 0 8 1 0 0 2 0 15 0 8 2 0 9 输出: 1 1 2 2 1 1 0 1 1 2 5 题意:题目给我们1x1和2x2的图标个数,让我们求最少需要多少个5x3的屏幕。 思路:当只看2x2的图…

短视频内容创意方法有哪些?成都科成博通文化传媒公司

短视频内容创意方法有哪些? 随着移动互联网的迅猛发展,短视频平台已成为人们日常生活中不可或缺的一部分。短视频以其短平快的特点,迅速吸引了大量用户。然而,面对海量的短视频内容,如何让自己的作品脱颖而出&#xf…

02 Prometheus入门安装教程

02 Prometheus入门安装教程 大家好,我是秋意零。今天分享一篇入门级Prometheus安装教程。 环境准备 三台Linux虚拟机(一台也可以) 准备Prometheus、相关组件安装包 Prometheus官网下载安装包比较慢,如果没有魔法。可关注公众号…

打包软件注意

1.建个文件夹D:333 /Dalsa_Cameras /cam1 cam2 2. 3.缺的包 4.自动启动.exe exe快捷方式放一起

头文件大小写引发的报错

jenkins下打包编译报错如下,提示编译zynqCan.c时找不到“syscfgpll/sysCfgpll.h”文件。 但IDE下编译是没有报错也没有警告的,工程中也存在文件“syscfgpll/sysCfgPll.h”。 仔细观察发现,报错说的是找不到头文件“syscfgpll/sysCfgpll.h”…

从 0 手撸一个 pytorch

背景介绍 最近抽空看了下 Andrej Karpathy 的视频教程 building micrograd,教程的质量很高。教程不需要任何前置机器学习基础,只需要有高中水平的数学基础即可。整个教程从 0 到 1 手撸了一个类 pytorch 的机器学习库 micrograd,核心代码不到…

关于VFX Graph的学习

关于VFX Graph的学习 转载自我的有道云笔记,目前内容不多,后续如果继续使用会更新。 前言 出于实习工作需要和毕设需要,我开始使用VFXGraph。 以前准备第一批作品集的时候,就简单地使用过,但是只是跟着教程一顿乱连…

PENDLE会是打响LSDFI赛道的第一枪吗?以bitget钱包为例

Pendle Finance是什么? PENDLE是Pendle Finance的原生通证,因此,在介绍Pendle币之前,我们需要对Pendle Finance有一个简单的了解。、 Pendle是一个建立在以太坊区块链上的无需许可的去中心化金融(DeFi)协议&#xff…

长三角智能科技高端盛会—南京人工智能展览会(南京智博会)

南京,作为一座历史悠久的文化名城,早已不仅仅以其深厚的文化底蕴和独特的自然风貌著称于世。而今,这座古老而又年轻的城市,正以其卓越的科技实力和创新精神,成为中国乃至全球科研领域的一颗璀璨明珠。南京不仅是中国三…