【Java探索之旅】初识多态_概念_实现条件

文章目录

  • 📑前言
  • 一、多态
    • 1.1 概念
    • 1.2 多态的实现条件
  • 🌤️全篇总结

📑前言

多态作为面向对象编程中的重要概念,为我们提供了一种灵活而强大的编程方式。通过多态,同一种操作可以应用于不同的对象,并根据对象的具体类型来执行不同的行为,从而使代码更加灵活、可扩展和易于维护。本文将深入探讨多态的概念、实现条件以及优点,帮助您更好地理解和应用多态在Java编程中的重要性和实际应用。

一、多态

1.1 概念

简单来说,多态就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

多态是面向对象编程中的一个重要概念,指的是同一种操作可以作用于不同的对象,并根据对象的不同而执行不同的行为。多态性能够提高代码的灵活性和可扩展性。

在多态中,同一种操作可以根据对象的不同而具有不同的实现。这种操作可以是方法调用、函数调用或者运算符的使用。多态性的实现通常依赖于继承和重写。

多态性的核心概念是接口和抽象类。通过定义接口或者抽象类,可以定义一组共同的方法,然后不同的子类可以根据自己的需求来实现这些方法。当调用这些方法时,根据实际的对象类型,会执行对应子类的方法。

多态性的优点包括代码的可读性和可维护性增强,能够简化代码的设计和实现,提高代码的重用性和灵活性。多态性也是面向对象编程的重要特征之一,可以帮助开发者更好地组织和管理代码。

吃饭是同一件事情,但是不同的动物的吃的却不一样,不同的对象会有不同的状态。

1.2 多态的实现条件

多态的实现必须要满足以下几个条件(缺一不可):

  1. 必须在继承体系下
  2. 子类必须要对父类中方法进行重写
  3. 通过父类的引用调用重写的方法

多态的体现:

 在代码运行时,当传递不同类对象时,会调用对应类中的方法。
class Animal {String name;int age;public Animal(String name, int age){this.name = name;this.age = age;}public void eat(){System.out.println(name + "吃饭");}
}
class Cat extends Animal{public Cat(String name, int age){super(name, age);}@Overridepublic void eat(){System.out.println(name+"吃鱼~~~");}
}
class Dog extends Animal {public Dog(String name, int age){super(name, age);}@Overridepublic void eat(){System.out.println(name+"吃骨头~~~");}
}
///
public class Exercise {// 编译器在编译代码时,并不知道要调用Dog 还是 Cat 中eat的方法// 等程序运行起来后,形参a引用的具体对象确定后,才知道调用那个方法// 此处的形参类型必须是父类类型才可以public static void eat(Animal a){a.eat();}public static void main(String[] args) {Dog dog = new Dog("小七",7);Cat cat = new Cat("咪咪",3);eat(dog);eat(cat);}
}

在上述代码中, 分割线上方的代码是 类的实现者 编写的, 分割线下方的代码是 类的调用者 编写的。

当类的调用者在编写 eat 这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的a 引用指向的是哪个类型(哪个子类)的实例。

此时 a这个引用调用 eat方法可能会有多种不同的表现(和 a 引用的实例相关), 这种行为就称为 多态。

🌤️全篇总结

多态在面向对象编程中的重要性和实现条件。多态性使得代码更具灵活性和可扩展性,通过继承和重写,不同的子类可以根据自身需求来实现共同的方法,实现同一操作的多种表现。多态性的优点包括提高代码的可读性、可维护性和重用性,是面向对象编程中不可或缺的特性之一。

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

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

相关文章

el-table 树形数据与懒加载 二级数据不展示

返回的数据中 children和hasChildren只能有一个,不能同时存在,否则加载数据会失败

零基础STM32单片机编程入门(八)定时器PWM输入实战含源码视频

文章目录 一.概要二.PWM输入框架图三.CubeMX配置一个PWM输入例程1.硬件准备2.创建工程3.调试 四.CubeMX工程源代码下载五.讲解视频链接地址六.小结 一.概要 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用单…

手把手搭建微信机器人,帮你雇一个24小时在线的个人 AI 助理(上)

上一篇,带领大家薅了一台腾讯云服务器:玩转云服务:手把手带你薅一台腾讯云服务器,公网 IP。 基于这台服务器,今天我们一起动手捏一个基于 LLM 的微信机器人。 0. 前置准备 除了自己常用的微信账号以外,还…

盘点8款国内顶尖局域网监控软件(2024年国产局域网监控软件排名)

局域网监控软件对于企业网络管理至关重要,它们可以帮助IT部门维护网络安全,优化网络性能,同时监控和控制内部员工的网络使用行为。以下是八款备受推崇的局域网监控软件,每一款都有其独特的优势和适用场景。 1.安企神软件 试用版领…

VSCode远程服务器如何上传下载文件(超方便!)

方法一: 1、在VSCode应用商店安装SFTP插件 2、然后就可以直接把文件拖进VSCode即可,如下图所示: 这里的目录是我远程服务器上的目录,可以直接将要上传的文件直接拖进需要的文件夹 3、如果要从远程服务器上下载文件到本地&#x…

安装Gradle

官网文档 https://gradle.org/ 腾讯下载镜像:https://mirrors.cloud.tencent.com/gradle/ 文档:https://docs.gradle.org/current/userguide/userguide.html 命令行文档:https://docs.gradle.org/current/userguide/command_line_interface.…

Java高级重点知识点-21-IO、字节流、字符流、IO异常处理、Properties中的load()方法

文章目录 IOIO的分类 字节流字节输出流【OutputStream】字节输入流【InputStream】图片复制 字符流字符输入流【FileReader】字符输出流【FileWriter】 IO异常的处理(扩展知识)Properties属性集(java.util) IO Java中I/O操作主要是指使用 java.io 包下的…

《侃侃而谈 · 关于接外单的一些事》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

期末成绩发布方式

期末考试结束后,成绩单的发放总是让老师们头疼不已。想象一下,每个学生的成绩都需要老师一个个私信给家长,不仅耗时耗力,而且极易出错。 在传统的成绩单发放方式中,老师往往需要通过电子邮件、短信或者微信等方式&…

【Rust基础入门】Hello Cargo

文章目录 前言Cargo是什么?Cargo的作用查看cargo版本使用cargo创建项目Cargo.toml文件cargo build命令cargo runcargo check为发布构建 总结 前言 在Rust编程中,Cargo扮演着至关重要的角色。它是Rust的包管理器,负责处理许多任务&#xff0c…

【TB作品】51单片机 Proteus仿真 00002仿真-智能台灯色调倒计时光强

实验报告:基于51单片机的智能台灯控制系统 背景 本实验旨在设计一个基于51单片机的智能台灯控制系统,该系统可以通过按键进行手动控制,并能根据环境光强度自动调节台灯亮度。此外,系统还具备倒计时关灯功能。 器件连接 51单片…

软件运维服务方案(Word原件2024)

软件运维服务方案(Word原件) 1. 服务简述 我们提供全面的软件运维服务,确保软件系统的稳定运行。 1.1 服务内容 包括监控、维护、故障排查与优化。 1.2 服务方式 结合远程与现场服务,灵活响应客户需求。 1.3 服务要求 高效响应&am…

双向DFS——AcWing 171. 送礼物

双向DFS 定义 双向深度优先搜索(Bi-directional Depth First Search, BD-DFS)是一种在图或树中寻找两点间路径的算法。与传统的单向DFS不同,BD-DFS同时从起始节点和目标节点出发进行搜索,使用两个DFS过程。一个向前探索从起点到…

从一个(模型设计的)想法到完成模型验证的步骤

从有一个大型语言模型(LLM)设计的想法到完成该想法的验证,可以遵循以下实践步骤: 需求分析: 明确模型的目的和应用场景。确定所需的语言类型、模型大小和性能要求。分析目标用户群体和使用环境。 文献调研&#xff1a…

swiftui中常用组件picker的使用,以及它的可选样式

一个可选项列表就是一个picker组件搞出来的,它有多个样式可以选择,并且可以传递进去一些可选数据,有点像前端页面里面的seleted组件,但是picker组件的样式可以更多。可以看官方英文文档:PickerStyle | Apple Developer…

【对接支付宝支付详细流程】

下面示例使用的是支付宝的网页支付,最终的效果如图: 1.前置条件 对接支付宝你需要了解的知识点 1.加密算法 对称加密和非对称加密,RSA2加密算法,签名验证 2.支付宝平台openid unionId的概念 https://opendocs.alipay.com/pre…

文件管理下:文件函数的学习

前言 Hello,小伙伴们你们的作者君又来了,上次我们简单介绍了文件的坐拥并简单提到了数据的读取,和C语言的默认流的作用,今天我将继续带领大家探索文件的奥秘,大家准别好了吗? 在内容开始之前还是按照惯例&#xff0c…

初识java—jdk17的一些新增特性

文章目录 前言一 : yield关键字二 :var关键字三 :密封类四 :空指针异常:五:接口中的私有方法:六:instanceof关键字 前言 这里介绍jdk17相对于jdk1.8的部分新增特性。 一 &#xff…

QT使用QGraphicsView绘图 重写QGraphicsObject类实现点在QPainterPath路径上移动动画效果

闲谈:眨眼间,2024年就过去了一半了,年前定下的计划一个都没完成,乘着有空,把之前学习的内容和示例先总结了。 目录 导读SVG 转QPainterPath 路径获取QPainterPath指定长度时的坐标。重写QGraphicsObject类 实现点图元Q…

stm32精密控制步进电机(基础篇)

众所周知,步进电机由于使用脉冲控制,会比直流电机的控制稍难一些,但开环控制时也更加稳定。 落到做项目的时候,目前来说我都会先考虑步进电机,再去考虑直流,无刷这样的电机。包括毕设时所用的机械臂也是用…