当前位置: 首页 > news >正文

【多态】(超级详细!)

【多态】(超级详细!)

  • 前言
  • 一、 多态的概念
  • 二、重写
    • 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方法。

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

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

相关文章:

【多态】(超级详细!)

【多态】(超级详细!) 前言一、 多态的概念二、重写1. 方法重写的规则2. 重写和重载的区别 三、多态实现的条件四、 向上转型五、动态绑定 前言 面向对象的三大特征:封装性、继承性、多态性。 extends继承或者implements实现&…...

vue的组件化

vue的组件化 vue的组件化,就是根据功能、业务逻辑、数据流向等因素进行划分把页面拆分成多个组件。组件是资源独立的,组件也可以相互嵌套。目的是提高代码的可读性、可维护性和可复用性。 组件化思想体现 ​ 组件封装步骤 1.公共组件 公共组件全局注…...

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD(Resilient Distributed Dataset,弹性分布式数据集)是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型,即RD…...

【第5章】SpringBoot整合Druid

文章目录 前言一、启动器二、配置1.JDBC 配置2.连接池配置3. 监控配置 三、配置多数据源1. 添加配置2. 创建数据源 四、配置 Filter1. 配置Filter2. 可配置的Filter 五、获取 Druid 的监控数据六、案例1. 问题2. 引入库3. 配置4. 配置类5. 测试类6. 测试结果 七、案例 ( 推荐 )…...

力扣654. 最大二叉树

Problem: 654. 最大二叉树 文章目录 题目描述思路复杂度Code 题目描述 思路 对于构造二叉树这类问题一般都是利用先、中、后序遍历,再将原始问题分解得出结果 1.定义递归函数build,每次将一个数组中的最大值作为当前子树的根节点构造二叉树;…...

基于Netty实现WebSocket客户端

本文是基于Netty快速上手WebSocket客户端,不涉及WebSocket的TLS/SSL加密传输。 WebSocket原理参考【WebSocket简介-CSDN博客】,测试用的WebSocket服务端也是用Netty实现的,参考【基于Netty实现WebSocket服务端-CSDN博客】 一、基于Netty快速…...

homebrew安装mysql的一些问题

本文目录 一、Homebrew镜像安装二、mac安装mysql2.1、修改mysql密码 本文基于mac环境下进行的安装 一、Homebrew镜像安装 Homebrew国内如何自动安装,运行命令/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 会…...

产线问题排查

CPU过高 使用top命令查看占用CPU过高的进程。 导出CPU占用高进程的线程栈。 jstack pid >> java.txt Java 内存过高的问题排查 1.分析OOM异常的原因,堆溢出?栈溢出?本地内存溢出? 2.如果是堆溢出,导出堆dump&…...

华为WLAN实验继续-2,多个AP如何部署

----------------------------------------如果添加新的AP,如何实现多AP的服务----------- 新增加一个AP2启动之后发现无法获得IP地址 在AP2上查看其MAC地址,并与将其加入到AC中去 打开AC,将AP2的MAC加入到AC中 sys Enter system view, re…...

手把手教你写Java项目(1)——流程

个人练手项目的一般流程: 个人练手项目的流程通常相对简单和灵活,但仍然遵循一定的步骤来确保项目的顺利进行。流程相对较为详细,不是所有流程都要实现,一些仅供参考。主要是让大家对项目有初步的了解,不至于无法入手…...

微信小程序post请求

一、普通请求 wx.request({url: http://43.143.124.247:8282/sendEmail,method: POST,data: {user: that.data.currarr[0][that.data.mulu[0]] that.data.currarr[1][that.data.mulu[1]] that.data.sushe,pwd: 3101435196qq.com},header: {Content-Type: application/x-www-…...

frm一级4个1大神复习经验分享系列(二)

先说一下自己的情况,8月份中旬开始备考,中间一直是跟着网课走,notes和官方书都没看,然后10月份下旬开始刷题一直到考试。下面分享一些自己备考的经验和走过的弯路。 一级 一级整体学习下来的感受是偏重于基础的理论知识。FRM一级侧…...

理解磁盘分区与管理:U启、PE、DiskGenius、MBR与GUID

目录 U启和PE的区别: U启(U盘启动): PE(预安装环境): 在DiskGenius中分区完成之后是否还需要格式化: 1.建立文件系统: 2.清除数据: 3.检查并修复分区: 分区表格式中,MBR和GUID的区别: 1…...

GPT-4o和GPT-4有什么区别?我们还需要付费开通GPT-4?

GPT-4o 是 OpenAI 最新推出的大模型,有它的独特之处。那么GPT-4o 与 GPT-4 之间的主要区别具体有哪些呢?今天我们就来聊聊这个问题。 目前来看,主要是下面几个差异。 响应速度 GPT-4o 的一个显著优势是其处理速度。它能够更快地回应用户的查…...

《C++ Primer Plus》第十二章复习题和编程练习

目录 一、复习题二、编程练习 一、复习题 1. 假设String类有如下私有成员: // String 类声明 class String { private: char* str;int len;// ... };a. 下述默认构造函数有什么问题? String::String() { } // 默认构造函数b. 下述构造函数有什么问题…...

2024 年科技裁员综合清单

推荐阅读: 独立国家的共同财富 美国千禧一代的收入低于父辈 创造大量就业机会却毁掉了财富 这四件事是创造国家财富的关键 全球财富报告证实联盟自始至终无能 美国人已陷入无休止债务循环中,这正在耗尽他们的财务生命 2024 年,科技行业…...

Linux系统编程学习笔记

1 前言 1.1 环境 平台:uabntu20.04 工具:vim,gcc,make 1.2 GCC Linux系统下的GCC(GNU Compiler Collection)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。gcc是可以在多种硬体平台上编译出可执…...

vue3 excel 文件导出

//文件导出 在index.ts 中 export function downloadHandle(url: string,params?:object, filename?: string, method: string GET){ try { downloadLoadingInstance ElLoading.service({ text: "正在生成下载数据,请稍候", background: "rgba…...

优雅的代码规范

在软件开发中,优雅的代码规范可以帮助我们写出既美观又实用的代码。 以下是提升代码质量的建议性规范: 命名清晰: 使用描述性强的命名,让代码自我解释。 简洁性: 力求简洁,避免冗余,用最少的代…...

JVM、JRE 和 JDK 的区别,及如何解决学习中可能会遇到的问题

在学习Java编程的过程中,理解JVM、JRE和JDK之间的区别是非常重要的。它们是Java开发和运行环境的核心组件,各自扮演不同的角色。 一、JVM(Java Virtual Machine) 定义 JVM(Java虚拟机)是一个虚拟化的计算…...

本地部署openclaw(window环境下)不用花钱买token版

步骤一:参考视频到安装 openclaw 前就行(剩下的步骤和博主不太样) 步骤 2 1、免费注册一个 NVIDIA NIM 账户: 【点击前往】 登入后在设置中心生成你自己的API Keys ,过期时间选择永不过期,目前可以直接免…...

Fish Speech 1.5 Web界面保姆级教程:上传参考音频→文本对齐→语音生成全链路

Fish Speech 1.5 Web界面保姆级教程:上传参考音频→文本对齐→语音生成全链路 你是不是也想用AI生成和自己声音一模一样的语音?Fish Speech 1.5就能帮你实现这个愿望!这个强大的语音合成工具不仅能生成自然流畅的语音,还能通过参…...

像素幻梦·创意工坊应用场景:独立音乐人专辑封面像素艺术生成流程

像素幻梦创意工坊应用场景:独立音乐人专辑封面像素艺术生成流程 1. 引言:像素艺术在音乐视觉中的价值 在数字音乐时代,专辑封面依然是艺术家表达音乐理念的重要载体。对于独立音乐人而言,独特的视觉风格往往能成为作品的标志性符…...

像素史诗落地企业知识库:用Pixel Epic构建内部行业情报自动摘要系统

像素史诗落地企业知识库:用Pixel Epic构建内部行业情报自动摘要系统 1. 企业知识管理的新挑战 在信息爆炸的时代,企业面临的最大挑战不是获取信息,而是如何从海量数据中提取有价值的知识。传统知识管理系统存在几个关键痛点: 信…...

SiameseUIE中文-base效果对比:在CLUE-NER和COTE-ABSA双基准测试

SiameseUIE中文-base效果对比:在CLUE-NER和COTE-ABSA双基准测试 想找一个开箱即用、效果又好的中文信息抽取工具?今天我们来聊聊阿里巴巴达摩院出品的SiameseUIE中文-base模型。这可不是一个普通的模型,它是一个“通用信息抽取”模型&#x…...

Graphormer实战教程:基于ogb库加载PCQM4M数据微调模型示例

Graphormer实战教程:基于ogb库加载PCQM4M数据微调模型示例 1. 引言 Graphormer是一种创新的分子属性预测模型,采用纯Transformer架构的图神经网络设计。它专门针对分子图(原子-键结构)的全局结构建模与属性预测任务,…...

深度解析:基于摄像头的远程生理监测工具箱rPPG-Toolbox实战指南

深度解析:基于摄像头的远程生理监测工具箱rPPG-Toolbox实战指南 【免费下载链接】rPPG-Toolbox rPPG-Toolbox: Deep Remote PPG Toolbox (NeurIPS 2023) 项目地址: https://gitcode.com/gh_mirrors/rp/rPPG-Toolbox 远程生理监测技术正在医疗健康领域引发革命…...

Vue项目中天地图显示不全?试试这个MutationObserver的巧妙解法

Vue项目中天地图显示不全的终极解决方案:MutationObserver深度解析 第一次在Vue项目中集成天地图时,那种地图只渲染出一半的挫败感至今记忆犹新。控制台没有报错,API调用看起来也没问题,但地图就像被无形的剪刀裁切过一样&#xf…...

HuggingFace大语言模型实战:如何用Python脚本批量翻译YouTube字幕(含环境配置避坑指南)

HuggingFace大语言模型实战:Python脚本批量翻译YouTube字幕全攻略 当你在YouTube上发现一段精彩的英文技术讲座,或是需要研究某个外语行业报告时,自动翻译工具能大幅提升信息获取效率。本文将带你用HuggingFace生态构建一个本地化翻译工作流&…...

3GPP TS 23.256标准解读:无人机广播远程识别码(Broadcast Remote ID)到底是怎么工作的?

3GPP TS 23.256标准深度解析:无人机广播远程识别码的技术实现与合规路径 当一架无人机在城市上空盘旋时,地面人员如何快速确认它的合法身份?监管机构又该如何在密集的无线电环境中精准捕捉每一架飞行器的信息?这些问题的答案&…...