多态的优点

多态的优点

  • 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)与标准答案…

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

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

年化达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…

【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 …

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…

2. 创建kvm虚拟机

创建kvm虚拟机 一、创建kvm虚拟机1、virt-manager 图形化工具2、virt-install 命令行工具3、查看虚拟机 一、创建kvm虚拟机 1、virt-manager 图形化工具 2、virt-install 命令行工具 [rootlocalhost ~]# virt-install --namevm02_centos79 \ > --graphics vnc,listen0.0.0…

Java的数据类型(复习版)

思维导图 一.字面常量 什么是常量?在我的理解看来常量就是在一个程序运行期间,保持不变的量就是常量。 例如: System.out.println(100);System.out.println(a);System.out.println(3.114);这些都可以称为常量。 字面常量的分类:…

护眼落地灯哪个牌子好?盘点五款必入不踩雷的护眼大路灯

护眼落地灯哪个牌子好?在这个快节奏的时代,护眼落地灯已经从一种高端选择转变为日常用眼生活中的必须品。不论是提升普通照明,还是针对孩子学习是改善光线质量环境,一款优秀的护眼落地灯都能成为我们生活中的照明神器。怎么选择一…

Java实现电子围栏的小例子

主要需求是实现一个电子围栏判断的小例子其中包括前端和后端的demo代码 引入对应的依赖库 <!--jts库通常用于几何计算和表示地理空间数据--> <dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><…

在 VS Code 中自动化 Xcode 项目编译和调试

在 VS Code 中自动化 Xcode 项目编译和调试 在日常的开发工作中&#xff0c;Xcode 是 macOS、iOS、watchOS 和 tvOS 应用程序开发的主要工具。为了提高工作效率&#xff0c;许多开发者选择在 Visual Studio Code (VS Code) 中编辑代码&#xff0c;并希望能够直接从 VS Code 启…

无线传感器网络(物联网通信技术)期末考试2024年真题

目录 WSN期末复习资料 第一章&#xff1a;概述 第二章MAC协议 第三章路由协议 第四章时间同步技术 第五章定位技术 第六章安全技术 第七章拓扑控制 补充TPSN、HRTS公式推导 2024年期末考试考点 一、简述 二、考试真题回忆 WSN期末复习资料 第一章&#xff1a;概述 …

蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——新建工程

一、介绍 ​ 蓝桥杯嵌入式使用的单片机是STM32G431RBT6&#xff0c;内核ARM Cortex - M4&#xff0c;MCUFPU&#xff0c;170MHz/213DMIPS&#xff0c;高达128KB Flash&#xff0c;32KB SRAM&#xff0c;其余的外设就不多介绍了&#xff0c;参照数据芯片数据手册 ​ CT117E-M4…

JavaScript——while类型

目录 任务描述 相关知识 while类型 编程要求 任务描述 质数的定义如下&#xff1a;大于1的自然数&#xff0c;且除了1和本身外没有别的因数。如2、3、5、7。 本关任务&#xff1a;利用循环结构求质数的和。 相关知识 在选择结构中&#xff0c;条件会被测试一次&#xff…

74HC165芯片验证

目录 0x01 74HC165芯片介绍0x02 编程实现 0x01 74HC165芯片介绍 74HC165的引脚定义如下&#xff0c;长这个样子 ABCDEFGH是它的八个输入引脚&#xff0c;例如你可以将它连接按键&#xff0c;让它来读取8个按键值。也可以将他级联其它的74165&#xff0c;无需增加单片机GPIO引…