【多态】(超级详细!)

【多态】(超级详细!)

  • 前言
  • 一、 多态的概念
  • 二、重写
    • 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.mzph.cn/news/843249.shtml

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

相关文章

基于物联网技术的智能家居实训教学解决方案

引言 随着信息技术的飞速发展,,物联网(IoT)已深入至我们生活的每一个角落,从智能家居、智能健康、智能交通到智慧城市,无所不在。物联网技术已成为推动社会进步和产业升级的重要力量。智能家居作为物联网技…

5位机械工程师如何共享一台服务器算力

在数字化浪潮的推动下,算力共享技术正逐渐成为机械工程师们提升工作效率、优化资源配置的重要工具。那么五位机械工程师如何共享一台服务器算力呢? 首先,我们需要了解算力共享的基本概念。算力共享是指通过特定的技术手段,将分散…

机器学习之支持向量机SVM

支持向量机 概念 是supported vector machine(支持向量机),即寻找一个超平面使样本分成两类,且间隔最大分类 分类 硬间隔 若样本线性可分,且所有样本分类正确情况下,寻找最大间隔,即硬间隔 若…

计算机毕业设计 | springboot+vue汽车修理管理系统 汽修厂系统(附源码)

1,项目背景 在如今这个信息时代,“汽车维修管理系统” 这种维修方式已经为越来越多的人所接受。在这种背景之下,一个安全稳定并且强大的网络预约平台不可或缺,在这种成熟的市场需求的推动下,在先进的信息技术的支持下…

基于python实现的深度学习的车牌识别系统

基于python实现的深度学习的车牌识别系统 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 在车牌识别系统当中肯定是有登录的。怎么说呢,登录页面其实还是和最初的设…

提取Chrome中Cookie工具分享

用法 只需将站点输入即可。 SharpCookieMonster.exe [https://sitename.com] [chrome-debugging-port] [user data dir] 可选的第一个参数分隔chrome启动时最初连接的网站(默认为https://www.google.com)。 第二个可选参数指定用于启动chrome调试器的…

C++学习/复习7--泛型编程/函数模板/类模板

一、泛型编程 1.Swap()函数的模板实现 二、函数模板 1.概念 2.格式 3.实例化 (1)隐式与显示 注意事项:隐式与显示类型转换会产生临时变量,临时变量有常性,所以形参前加const 三、类模板 1.定义 2.例1 3.例2 4.注意事…

深入解析三层架构:构建稳定高效的软件系统

概述 顾名思义,三层架构分为三层,分别是“数据访问层”、“业务逻辑层”、“表示层”。 数据访问层:数据访问层在作业过程中访问数据系统中的文件, 实现对数据库中数据的读取保存操作。 表示层:主要功能是 显示数据和…

LeetCode刷题之HOT100之盛最多水的容器

狂风大作,降温了。下午提前把题目做了,上午做的最长回文子串还不是很能理解,慢慢理解吧,且看题 1、题目描述 2、逻辑分析 题目要求很清晰,我的思路就是暴力解法:枚举全部可能的情况(两数不相等…

【Qt QML】Dialog组件

带有标准按钮和标题的弹出对话框,用于与用户进行短期交互。 这个描述指的是一个常见的用户界面元素,即一个临时弹出的窗口(或对话框),它包含一个标题,显示对话框的用途或内容描述,以及一系列标…

[数据集][目标检测]航空发动机缺陷检测数据集VOC+YOLO格式291张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):291 标注数量(xml文件个数):291 标注数量(txt文件个数):291 标注类别…

Kyndryl 与 Nvidia 建立新的人工智能基础设施合作伙伴关系

Kyndryl与Nvidia宣布达成新的人工智能基础设施战略合作,共同推动AI技术的广泛应用。根据这一合作,Nvidia的先进AI软件解决方案将被引入Kyndryl的开放集成平台——Kyndryl Bridge,以优化基础设施工作负载,并为客户提供更高效的IT服…

AUS GLOBAL 与 UNICEF 联合国儿童基金会共同帮助叙利亚和土耳其地震受灾居民

2023年2月6日,土耳其东南部和叙利亚发生两次强烈地震和数十次余震,数以千计的儿童和家庭面临危机。 成千上万的房屋被毁,许多家庭被迫流离失所,而在一年中的这个时候,气温经常低于冰点,雪和冻雨很常见。许多学校、医院以及其他医疗和教育设施被地震破坏或摧毁,这对儿童造成了巨…

mongodb数据库备份到远程机器

一、背景 生产环境的mongodb数据库是直接购买阿里云的云数据库,但是在公司研发环境,我们是自己手动部署的。开发和测试的数据当然没有生产环境那么重要,但备份也是必要的,只不过容忍一定的数据丢失。 二、备份脚本 vi /etc/cro…

SpringCloud Alibaba Nacos分类配置--多方案配置隔离

文章目录 Nacos 分类配置(实现配置隔离)1.DataID 方案需求分析/图解配置实现测试 2.Group 方案需求分析/图解配置实现修改application.yml修改bootstrap.yml测试 3.Namespace 方案需求分析/图解配置实现修改application.yml修改bootstrap.yml测试 Namespace/Group/Data ID 关系…

MySQL连表查询练习

– 34. 查询所有员工的姓名和部门名称,没有部门的员工不需要展示 SELECTe.NAME 员工姓名,d.NAME 部门名称 FROMt_emp eINNER JOIN t_dept d ON e.dept_id d.id;– 35. 查询所有员工的姓名和部门名称,没有部门的员工展示BOSS SELECTe.NAME 员工姓名,i…

揭秘:如何使用Python统计女友生日还剩几天?

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何需要统计生日天数? 二、需求分析与准备 1. 用户输入格…

自适应星空背景个人导航单页(附带源码)

自适应星空背景个人导航单页 效果图部分源码领取源码下期更新预报 效果图 部分源码 function Star(id, x, y) {this.id id;this.x x;this.y y;this.r Math.floor(Math.random() * 2) 1;var alpha (Math.floor(Math.random() * 10) 1) / 10 / 2;this.color "rgba(…

shell脚本的基础应用

规范脚本的构成 #!/bin/bash # 注释信息 可执行的语句 执行脚本的方法 有1.添加x权限 ,绝对路经,或者相对路径2. 使用解释器 不需加x,root...bash...bash..echo 3,用source, 开机root ...bash ...echo bash -x /opt/test01.sh &#xff…

【算法】递归、搜索与回溯——汉诺塔

题解:汉诺塔(递归、搜索与回溯算法) 目录 1.题目2.题目背景(拓展了解)3.题解4.参考代码5.细节6.总结 1.题目 题目链接:LINK 2.题目背景(拓展了解) 汉诺塔问题是一个通过隐式使用递归栈来进行实现的一个经典问题,该问题最早的发明人是法国…