多态的优点

多态的优点

  • 1、多态的优点
    • 1.1 可替换性(Substitutability)
    • 2、可扩充性(Extensibility)
  • 2、总结


💖The Begin💖点点关注,收藏不迷路💖

1、多态的优点

在面向对象编程(OOP)中,多态性(Polymorphism)是一个非常重要且强大的概念。本文将讨论多态的两个主要优点:可替换性和可扩充性。

1.1 可替换性(Substitutability)

多态性的一个显著优点是它提供了代码的可替换性。这意味着可以使用一个子类的实例来替代父类的实例,而不会影响程序的正确性和功能。

示例:

假设我们有一个Shape基类和它的两个子类CircleRing。通过多态性,我们可以编写如下代码:

public class Shape {public void draw() {System.out.println("绘制一个形状");}
}public class Circle extends Shape {@Overridepublic void draw() {System.out.println("绘制一个圆形");}
}public class Ring extends Shape {@Overridepublic void draw() {System.out.println("绘制一个环形");}
}public class Main {public static void main(String[] args) {Shape shape1 = new Circle();Shape shape2 = new Ring();shape1.draw(); // 输出: 绘制一个圆形shape2.draw(); // 输出: 绘制一个环形}
}

在上述代码中,虽然shape1和shape2是用父类Shape的引用定义的,但它们实际指向的是子类Circle和Ring的对象。当我们调用draw方法时,会根据实际对象类型执行相应的方法。这就是多态性的可替换性。

2、可扩充性(Extensibility)

多态性还使得代码具有很好的可扩充性。也就是说,当增加新的子类时,不需要修改现有的代码,就能保证新类的多态性、继承性以及其他特性的运行和操作。

示例:

继续前面的例子,如果我们现在增加一个新的子类Rectangle:

public class Rectangle extends Shape {@Overridepublic void draw() {System.out.println("绘制一个矩形");}
}

我们只需添加一行代码即可在主程序中使用新的子类:

public class Main {public static void main(String[] args) {Shape shape3 = new Rectangle();shape3.draw(); // 输出: 绘制一个矩形}
}

增加新的子类Rectangle并不需要更改现有的代码,现有的多态机制仍然有效。这大大提高了代码的可扩充性。

2、总结

多态性是面向对象编程中的核心特性之一,它带来了以下两个主要优点:

1、可替换性:允许用子类对象替代父类对象,增强了代码的灵活性。

2、可扩充性:允许添加新的子类而不需要修改现有代码,提高了代码的可维护性和扩展性。
在这里插入图片描述


💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

无服务器【Serverless】架构的深度剖析:组件介绍、优缺点与适用场景

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、云计算的发展趋势 2、无服务器计算简介 二、无服务…

项目迭代中新老逻辑切流和对比 - 异步查询新接口

项目迭代中新老逻辑切流-切换入口项目迭代中新老逻辑切流 - 异步查询新接口项目迭代中新老逻辑切流 - 新老数据对比—待更新 前言 前面说到了 项目迭代中新老逻辑切换入口 ,有兴趣的可以先看一下,不知道大家有什么疑问吗? 怎么知道自己新接…

红海云签约海新域集团,产业服务运营领军企业加速人力资源数字化转型

北京海新域城市更新集团有限公司(以下简称“海新域集团”)是北京市海淀国有资产投资集团有限公司一级监管企业,致力于成为国内领先的产业服务运营商。集团积极探索城市和产业升级新模式,通过对老旧、低效等空间载体重新定位规划、…

FPGA基本资源介绍

文章目录 FPGA资源介绍1.可编程输入输出单元(IOB)2.可配置逻辑块(CLB)3.数字时钟管理模块(DCM)4.嵌入式块RAM(BLOCK RAM / BRAM)4.1其他ram 5.丰富的布线资源6.底层内嵌功能单元7.内嵌专用硬核软核、硬核、以及固核的概念 FPGA资源介绍 1.可编程输入输出单元(IOB) 可编程输入…

C++视觉开发 五.答题卡识别

答题卡识别主要步骤 (1)反二值化,选项处理为前景(白色),其它处理为背景(黑色)。 (2)每个选项提取出来,计算各选项白色像素点个数。 (3)筛选出白色像素点最多的选项作为考生答案。 (4)与标准答案…

【机器学习】连续字段的特征变换

介绍 除了离散变量的重编码外,有的时候我们也需要对连续变量进行转化,以提升模型表现或模型训练效率。在之前的内容中我们曾介绍了关于连续变量标准化和归一化的相关内容,对连续变量而言,标准化可以消除量纲影响并且加快梯度下降…

微信扫码进入小程序的webview页面,发现左上角没有home键

问题描述: 微信扫小程序二维码进到web-view内嵌h5页面,左上角没有返回小程序主页的home键,ios正常显示,Android 没有显示 导致的原因: 因为顶部导航栏我是自定义的 【如果是使用小程序原生的顶部导航栏是不会出现这种…

DiffSynth-Studio全面解析与应用示例

DiffSynth-Studio简介 1.1 DiffSynth-Studio的定义与目标用户 DiffSynth-Studio 是一个创新的扩散引擎,专门设计用于实现图片和视频的风格转换。它通过先进的机器学习技术,为用户提供了一种全新的创作方式,使得风格转换变得更加高效和直观。…

latex中引用参考文献的命令

在LaTeX中,常用于引用参考文献的命令有几种,它们的区别主要在于引用的风格和输出的格式。以下是几种常见的引用命令及其区别: 命令输出效果区别与特点\cite{key}[1]基本的引用命令,输出带方括号的引用编号\citet{key}Author (Yea…

循环序列模型

循环序列模型 1.为什么选择序列模型? 2.数学符号 3.循环神经网络模型 4.通过时间的反向传播 5.不同类型的循环神经网络 6.语言模型和序列生成 7.对新序列采样 8.循环神经网络的梯度消失 9.GRU单元 10.长短期记忆 11.双向循环神经网络 12.深层循环神经网…

年化达21%(K=1),最大回撤35%,K=3时,卡玛比最优,最大回撤20%(年化15.2%)| Quantlab5.0代码发布

原创文章第578篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 Quantlab5.0代码发布: 值得说明,Quantlab5与4没有继承关系,5开始的思路是: 1、尽量少封装,保留回测框架最原始的功能。…

【LabView学习篇 - 1】:初始LabView

文章目录 初始LabView前面板和程序框图前面板(Front Panel)程序框图(Block Diagram)交互和工作流程 练手小案例:LabView中实现加法操作 初始LabView LabVIEW(Laboratory Virtual Instrument Engineering W…

C#的多线程UI窗体控件显示方案

在C#中,特别是在使用Windows窗体(WinForms)或WPF(Windows Presentation Foundation)进行UI开发时,处理多线程与UI控件的交互需要特别小心。由于UI控件不是线程安全的,直接从非UI线程&#xff08…

yolov5 训练过程中的监控指标说明

1、参数的具体含义及其重要性 epoch: 训练迭代次数,表示模型已经进行了多少轮的训练。这是模型训练的基本计数单位,对于跟踪训练进度至关重要。 train/box_loss: 训练过程中边界框(bounding box)预测的损失值。这反映了模型在定位…

【CT】LeetCode手撕—93. 复原 IP 地址

目录 题目1- 思路2- 实现⭐93. 复原 IP 地址——题解思路 3- ACM 实现 题目 原题连接:93. 复原 IP 地址 1- 思路 模式识别:给一个 String 字符串 ——> 复原 IP 地址 ——> 回溯三部曲 ,回溯的切割问题 ——> 实现一个左闭右闭区间…

利用redis数据库管理代理库爬取cosplay网站-cnblog

爬取cos猎人 数据库管理主要分为4个模块,代理获取模块,代理储存模块,代理测试模块,爬取模块 cos猎人已经倒闭,所以放出爬虫源码 api.py 为爬虫评分提供接口支持 import requests import concurrent.futures import …

银河麒麟高级服务器操作系统(通用)安装和编译指定的python3版本

银河麒麟高级服务器操作系统(通用)安装和编译指定的python3版本 一 系统环境二 安装python3.12.42.1 安装编译需要的依赖包2.2 下载官网目前最新的python源码包2.3 解压Python-3.12.4.tar.xz2.4 配置python-3.12.42.5 编译安装2.6 配置环境变量使其生效2…

Artificial Intelligence Self-study

Artificial Intelligence Self-study Traditional AI (Symbolic AI) 基于:符号表示 数理逻辑 搜索 - 有明确规则,依靠算力。Appliance : 数学难题(Heuristic Algorithm),棋牌对抗(围棋),专家系统(输入病症&#xf…

linux安装jdk1.8(无废话版)

文章目录 1、下载安装包2、创建文件目录,并将安装包上传到该目录下3、解压安装包4、配置环境变量5、加载配置文件6、验证 前言:linux系统以ubuntu20.04.6版本为例,jdk版本jdk-8u411-linux-x64.tar.gz版本为例 1、下载安装包 jdk下载地址&am…

Python中列表推导式的概念以及示例

列表推导式(List Comprehension)是Python中一种简洁而强大的工具,用于从现有的可迭代对象(如列表、元组、字符串等)中快速生成新的列表。它提供了一种优雅的方式来表达循环和条件逻辑,以生成列表。列表推导…