重载和重写的区别

news/2024/11/15 2:56:14/文章来源:https://www.cnblogs.com/2324hh/p/18540011

 

重载(Overloading)和重写(Overriding)是面向对象编程中两个重要的概念,它们在实现多态性时起着关键作用,但两者之间有明显的区别:

  1. 定义上的区别:
  • 重载(Overloading) 指的是在同一个类中可以有多个方法名相同,但这些方法的参数列表(参数的个数、类型或顺序)不同,或者是方法的返回类型在Java中对此并不影响重载,但其他语言如C++中重载还可以基于返回类型的不同。重载是编译时多态(静态多态)的一个体现。
  • 重写(Overriding) 发生在子类和父类之间,子类定义了一个与父类中同名、同参数列表、同返回类型的方法,并且访问权限不能低于父类中的方法。重写是运行时多态(动态多态)的一个重要体现,需父类方法使用 ​​virtual​​(C++)或不加访问修饰符(Java中默认为 ​​virtual​​)。
  1. 规则上的区别:
  • 重载 的方法可以有不同的返回类型,可以有不同的访问修饰符(尽管通常最好保持一致),并且可以抛出不同的异常类型。
  • 重写 的方法必须与父类方法有相同的返回类型(或者是其子类型,但通常遵循协变返回类型原则),访问修饰符的限制必须大于等于父类(即不能比父类更严格),且不能抛出新的检查异常或者比父类方法声明的异常更广泛的检查型异常。
  1. 类的关系上的区别:
  • 重载 是同一个类内部方法之间的关系,是一种横向扩展,体现了类接口的多样性。
  • 重写 是子类与父类之间的一种关系,是一种纵向的替换或特化,体现了类行为的继承与变化。
  1. 发生时机上的区别:
  • 重载 是编译时决定的,由编译器根据调用方法时提供的参数类型和数量来选择正确的方法版本。
  • 重写 是在运行时根据对象的实际类型来决定调用哪个方法,这是通过动态绑定(或称为晚期绑定)实现的。

重载:必须有不同的参数列表;可以有不同的访问修饰符;可以抛出不同的异常;

重写:参数列表必须要与被重写的相同;返回的类型必须保持一致;修饰符和抛出的异常不能在被重写的方法之外

重写是父类与子类的关系,是垂直关系;重载是同一个类方法中的关系,是水平关系。

总结:

1.定义:重载是在同一个类中定义多个具有相同名称但不同参数的方法;重写是子类对父类中已有方法的重新实现。

2.参数列表:重载方法的参数列表必须不同;重写方法的参数列表必须相同。

3.绑定时机:重载是在编译时静态绑定;重写是在运行时动态绑定。

4.所属关系:重载方法在同一个类中;重写方法是子类对父类的方法进行重写。

5.重载:在同一个类中,当方法名相同,形参列表不同的时候  多个方法构成了重载,与修饰符无关,与返回值无关;与抛出异常无关;

6.方法重写:父子类、接口和实现类之间的关系,子类可以重写父类方法,但是参数个数、类型、返回值必须相同。 

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

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

相关文章

Python 学习记录 (4)

Plotly常见可视化方案:以鸢尾花数据为例 简单介绍:Ploty库也有大量统计可视化方案,并且这些可视化方案具有交互化属性。 主要对鸢尾花数据进行处理与可视化。 所展示的结果为交互界面的截图情况,这里不能进行交互。使用Plotly绘制散点图与箱型图,分类展示“花萼宽度” 说明…

聚丙烯的节奏

晚上7420附近企稳做多 损7400下方 这两天目标7530以上

低空载功耗,高能源利用率 BDA5-20W BOSHIDA DCDC

低空载功耗,高能源利用率 BDA5-20W BOSHIDA DCDC BDA5-20W系列产品具有以下特点:宽输入电压范围(4:1),可以适应多种输入电压条件;高效率,能够达到88%以上,节能环保;空载功耗低,可以节省能源;隔离电压为500VDC,能够提供良好的电气隔离性能;具有输入欠压保护、输出过…

LCEL与AgentExecutor的局限性分析

在大语言模型(LLM)应用开发领域,LangChain表达式语言(LCEL)和AgentExecutor一直是开发者的得力助手。然而,随着应用场景的复杂化,这些工具的局限性也日益凸显。本文将深入探讨LCEL和AgentExecutor的不足,并引入一个新的解决方案。 LCEL链表达式的局限性 LangChain表达式语言(LC…

SSD201/202D的SPI通讯该怎么操作,触觉智能带来保姆级攻略

本文介绍SigmaStar SSD201/SSD202D中SPI通讯的测试方法,SPI是一种常见的串行通信协议,它被广泛用于微控制器与各种外设之间的数据传输。使用触觉智能Purple Pi R1双网口开发板演示。本文介绍SigmaStarSSD201/SSD202D中SPI通讯的测试方法,SPI全称是Serial Peripheral Interfa…

多线程锁的升级原理是什么

锁的级别:无锁 => 偏向锁 => 轻量级锁 => 重量级锁 无锁:没有对资源进行锁定,所有线程都可以访问,但是只有一个线程能成功修改资源,其他的线程会不断尝试,直至修改成功。 偏向锁:偏向锁是指当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储…

Eplan2022卡顿问题解决

EPLAN2022卡顿崩溃怎么解决第一步:可以检查下用户设置。打开菜单 "选项 → 设置:用户 → 翻译 → 字典": 不勾选"自动完成"和"自动更正"。在选项设置框中输入"自动",快速找到用户设置,取消勾选,如下图。 第二步:可以检查下电脑语…

Linux中文件系统层次结构简述

在Linux操作系统中,并没有像Windows那样的“盘符”概念。相反,Linux使用一个统一的文件系统层次结构,所有的文件和目录都挂载在一个单一的根目录 / 下。这种设计使得文件系统的管理更加灵活和一致。 文件系统层次结构 在Linux中,文件系统通常按照以下层次结构组织:/(根目…

创建线程有哪几种方式

1. 继承 ​​Thread​​ 类 优点:简单直观,适合初学者。 直接继承 ​​Thread​​ 类,可以方便地访问和使用 ​​Thread​​ 类的方法。缺点:Java 不支持多继承,因此如果你的类已经继承了其他类,则不能继承 ​​Thread​​ 类。 仅适用于简单的线程任务。示例:class MyT…

[豪の学习笔记] CI/CD相关 - Docker

Docker常见命令,命名别名,数据卷挂载,本地目录挂载,自定义镜像,容器网络互联一、docker常见命令单独下载镜像文件 docker pull 查看本地镜像文件 docker images 删除本地镜像文件 docker rmi 基于dockerfile构建自定义镜像 docker build 将打包好的镜像保存在本地 docker …

excel中查找亏损第一大第二大第三大的商品的亏损金额;涨出第一大,第二大,第三大的金额;以及查找对应数值的商品的名称,

k2 里的公式 =LARGE(IF(B:B="品类1",E:E),1) lL 里的公式 =LARGE(IF(B:B="品类1",E:E),2) M2里额公式 =LARGE(IF(B:B="品类1",E:E),3) N2里的公式=MIN(IF(B:B="品类1",E:E),1) O2里的公式=SMALL(IF(B:B="品类1",E:E),2) P2里…