The difference between override and overload override和overload 的区别

深入解析C++虚函数表与多态实现机制 在面向对象编程中,多态是实现代码复用和扩展性的核心技术,它允许程序在运行时根据对象的实际类型调用相应的方法。C++通过虚函数表机制实现动态多态,每个包含虚函数的类都有一个对应的虚函数表,对象通过虚表指针访问该表以确定要调用的函数地址。这种机制虽然引入了微小的运行时开销,但极大地提升了代码的抽象能力和可维护性,广泛应用于框架设计、插件系统和图形界面等场景。理解虚函数表的内存布局、多继承下的复杂结构以及虚函数调用的底层原理,有助于开发者编写更高效、健壮的C++代码,并能在调试内存问题和进行性能优化时游刃有余。 阅读详情
override(重写,覆盖) 
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。

overload(重载,过载)
1、参数类型、个数、顺序至少有一个不相同。  
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。


方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。
 
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)
。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了.
 
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同
的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常
进行重载.
1. Override 特点
 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;
 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

2.Overload 特点
 1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int, float), 但是不能为fun(int, int));
 2、不能通过访问权限、返回类型、抛出的异常进行重载;
 3、方法的异常类型和数目不会对重载造成影响;
 4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
 
A和B比较,当参数顺序不一样时,也可以
A和以C比较,当参数类型不一样时,也可以
A和D比较,当参数个数不一样时,也可以
A和E,F比较,当参数类型,顺序或者个数不一样时,返回值是可以不一样的
A和G比较,当参数一样时,返回值是不能不同的
   public void fun(String t, int i) {
        //A
    }
    public void fun(int i, String t) {
        //B
    }
    public void fun(int i, int t) {
        //C
        System.out.println("in (int ,int )");
    }
    public void fun(String t, int i, int c) {
        //D
    }
    public int fun(char t, int i) {
        //E
        System.out.println("in int fun");
        return 3;
    }
    public int fun(char t) {
        //F
        System.out.println("in int fun");
        return 3;
    }
  
//    public int fun(String t, int i) {//syntax error
//        //G
//        return 3;
//    }

再如下例

class NoteX {
    public static final int MIDDLE_C = 0, C_SHARP = 1, C_FLAT = 2;
}

class InstrumentX {
    public void play(int NoteX) {
        System.out.println("InstrumentX.play()");
    }
}

class WindX extends InstrumentX {
    public void play(NoteX n) {
        System.out.println("WindX.play(NoteX n)");
    }
}
class WindM extends InstrumentX {
    public void play(int n) {
        System.out.println("WindM.play(int n)");
    }
}
class WindY extends InstrumentX {
    public int play(NoteX n) {
        System.out.println("WindY.play(NoteX n)");
        return 1;
    }
}
//systax error
//class WindZ extends InstrumentX {
//    public int play(int n) {
//        System.out.println("WindZ.play(int n)");
//        return 1;
//    }
//}

public class WindError {
    public static void tune(InstrumentX i) {
        i.play(NoteX.MIDDLE_C);
    }

    public static void main(String[] args) {
        WindX flute = new WindX();
        tune(flute);
        WindM windm = new WindM();
        tune(windm);
        WindY windy = new WindY();
        tune(windy);
       
       
    }
}
输出结果:
InstrumentX.play()
WindM.play(int n)
InstrumentX.play()

分析:对于类WindX显然是过载,因为返回值一样,只是参数类型不一样(如果是参数个数,顺序不一样,肯定也行的)
   对于类WindM显然是重写,因为返回值一样,并且参数类型,个数,顺序一样   
   对于类WindY实在不好下结论,因为类WindZ己经报语法错误了,显然重载是不能以返回值来区分的,正好印证了上面的话,所以实在不好说WindY到底是属于过载还是其它什么东西
Java overload和override的区别分析 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,想要了解更多请参考本 立即下载

相关推荐

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1448

What's the difference between overload and override

<br />Overload means same function name defined in the class, but with different parameters. It's just about the polymophysm.<br />void func( int );<br />void func( double );<br />void fund( unsigned int );<br /> <br />Override means same function name wit

Jeffery的面试题库 1032

WhatsApp API接口的隐秘角落:从协议解析到自定义消息引擎

本文深入解析WhatsApp API接口的隐秘角落,从协议逆向工程到自定义消息引擎开发实战。通过分析WhatsApp的二进制XML协议和加密机制,构建超越官方API限制的自定义消息引擎,实现高效、灵活的即时通讯解决方案。文章还提供了企业级架构设计和风控规避策略,助力开发者突破官方限制,提升消息到达率和成本效益。

q3r4s5t的博客 761

Overload(重载)和Override(重写)的区别是什么?

总结一下,重载(Overload)是在同一个类中定义多个同名方法,它们之间通过参数列表的不同来区分;而重写(Override)是在子类中定义一个与父类完全相同的方法来覆盖父类的同名方法。重载的方法通常实现的是相近的功能,但接受不同的参数。重写发生在父类和子类之间,子类有一个与父类完全相同的方法(包括方法名、参数列表和返回类型)。在面向对象编程中,“重载(Overload)”和“重写(Override)”是两个非常重要的概念,但它们在用法和目的上有很大的区别。

4万+

水文模型新手必看:用SWAT-CUP做参数率定,如何正确设置预热期、率定期和验证期?(附数据准备避坑指南)

本文详细介绍了使用SWAT-CUP进行水文模型参数率定的完整流程,重点解析了预热期、率定期和验证期的正确设置方法,并提供了数据准备的避坑指南。通过实操步骤和常见问题解决方案,帮助新手快速掌握SWAT-CUP参数率定的核心技巧,提升水文模型模拟精度。

weixin_26875109的博客 374

PHY6252开发实战:从零构建BLE串口透传应用

本文详细介绍了PHY6252开发板在BLE串口透传应用中的实战经验,包括开发环境搭建、BLE串口透传例程解析、AT指令集实现与扩展、数据透传机制优化以及常见问题排查指南。通过智能家居遥控器项目案例,展示了PHY6252在低功耗物联网设备开发中的实际应用。

weixin_29183637的博客 313

Overload和Override的区别

表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是。、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

m0_73784167的博客 324

量化策略开发步骤系列(5)前向测试和统计意义

我们在第 4 部分,展示了我们策略的样本外测试并讨论了其结果。用于开发模型的数据是 2018 年至 2021 年的数据,测试数据是 2021 年至 2022 年的数据。但有一种方法可以更好地利用我们的数据。

码上助君的专栏 1847

java中overload与override的区别

1、综述   重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现。 override从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。overload它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。

eff666的博客 1万+

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

利用 Python 爬虫进行舆情监测的实战方法

舆情监测是指对互联网上的公众舆论进行监测和分析的过程。它可以帮助企业和组织了解公众对其品牌、产品或服务的看法,以及市场竞争情况。通过舆情监测,企业可以及时发现潜在的问题和机会,从而做出相应的决策。通过本实战案例,我们了解了如何利用 Python 爬虫进行舆情监测的整个流程。从数据采集到数据分析,再到可视化展示,每一步都提供了详细的代码示例和注释。希望这些方法和技巧能够帮助你在实际工作中更好地进行舆情监测,从而为企业的决策提供有力的支持。wordcloud。

u014481728的博客 1054

java中overload和override区别

1、综述  overload它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法, 调用时VM就会根据不同的参数样式,来选择合适的方法执行,是一个类中多态性的一种表现。 Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时, 将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,是父类与子

andyzhaojianhui的专栏 603

YOLOv11改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合

可扩展的高效物体检测BiFPN(加权双向特征金字塔网络)

Limiiiing的博客 5498

The Difference of Override and Overload

<br />1、覆写(Override)与重载(Overload)的区别<br />  override修饰符,覆写一个基类中的方法...重载则是将将同名方法重新写过,达到同名的函数实现不同的功能.从而实现了一个方法有不同的版本.override与重载的本质区别是,加入了override的修饰符的方法,此方法始终只有一个被你使用的方法..这个区别就好像:<br />  override就好像<br />  你叫张三,你爸爸给修改了名字为李四...<br />  重载就好像<br />  你叫张三,但是别人也

周雅钧 955

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Difference between Override and Reintroduce in Delphi

Difference between Override and Reintroduce in Delphi(delphi 中override和reintroduce的区别)

jzt_designer的专栏 499

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

面试官问,重载(overload)和重写(override)的区别?

重载(overload) 方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同; 重写(override) 方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型; 需要注意的是,被final修饰的方法不能重写;抽象类和接口的方法必须要重写。 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。 面试题:重载(Overlo

胡麻油 294

overload与override的区别

override(重写,覆盖)  1、方法名、参数、返回值相同。  2、子类方法不能缩小父类方法的访问权限。  3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。  4、存在于父类和子类之间。  5、方法被定义为final不能被重写。  overload(重载,过载)  1、参数类型、个数、顺序至少有一个不相同。    2、不能重载只有返回值不同的方法名。 

john548的专栏 234

overload&override的比较

gost9070的博客 137

C++函数重载:从语法糖到重载决议的深度解析与实战指南

函数重载是C++中实现静态多态的核心机制,它允许在同一作用域内定义多个同名函数,通过参数列表的差异来区分。其底层原理依赖于编译器的名字修饰技术,将参数类型信息编码到函数名中,从而在链接阶段实现唯一标识。这一特性极大地提升了代码的可读性和接口的简洁性,是构建类型安全、表达力强的API的重要基础。在工程实践中,函数重载与重载决议机制紧密相关,编译器需要根据实参类型从候选函数集中选择最佳匹配,这涉及到精确匹配、类型提升和标准转换等复杂规则。理解这些规则对于避免模糊调用错误、设计清晰的类接口至关重要。特别是在现代C

weixin_34357436的博客 428

深入C++与QT高频面试题(不定时更新)

本文总结了C++、数据库和Qt相关的常见面试题,涵盖以下核心内容: C++特性与智能指针 智能指针(unique_ptr/shared_ptr/weak_ptr)解决内存管理问题 构造函数/析构函数特性,虚函数与纯虚函数区别 STL容器分类与特性(vector/list/set/map等) 多线程编程 线程创建方式(Thread类/moveToThread) 线程同步机制(互斥锁/条件变量/读写锁) 进程间通信方式(管道/共享内存/消息队列) 数据库基础 事务ACID特性与操作流程 索引原理与使用场景 关系

阿博的博客 1255

C++静态多态与模板详解

多态”和“模板”是 C++ 中非常重要的两个概念。它们看起来都能实现“不同对象执行不同操作”,但原理并不相同。什么是多态;什么是静态多态;什么是动态多态;编译器什么时候决定调用哪个函数;函数模板和类模板怎样工作;什么是模板实例化;什么是模板特化;什么是;什么是 Concepts;什么是 CRTP;静态多态和动态多态应该怎样选择。

clearhenry的博客 213

Java中方法重写(Overriding)和重载(Overloading)的区别

方法重写:在子类中改变父类方法的行为,需要满足方法签名相同和访问权限不低于父类方法的规则,是运行时多态的体现。方法重载:在同一个类中定义多个方法名相同但参数列表不同的方法,是编译时多态的体现。这两个概念在Java编程中都有重要的作用,它们提高了代码的灵活性和可重用性。

m0_61431263的博客 372

JAVA面试笔试:Override 和 Overload的区别

1、综述  Override:重写; Overload:重载。 这两者之间的区别在很多Java的面试笔试中都会经常被问到,下面我就捋一下他们的区别。 重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现。 override从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。overload它是指我们可...

华农老林的博客 1万+

java中Overload和Override的区别

在 Java 中,和都是面向对象编程中的多态性实现方式,但它们的目的和使用场景不同。

开源AI 专属 UI——papyrai-ui。《千界明彻录》(故事形式构建元思维)——胡说小说。更多思辨内容在公众号。 939

【Java面试】重载(Overload)和 重写(Override)的区别

重载:发生在同一个类中,方法名相同但参数列表不同,与返回值类型和访问修饰符无关。重写:发生在父子类中,方法名、参数列表和返回值类型必须相同,访问修饰符不能更严格,抛出异常范围不能更大。理解重载和重写的区别,能够帮助我们在实际开发中更好地设计类和方法,同时也能在面试中从容应对相关问题。

体系化很难,碎片归纳很简单。 854
上一篇: 追忆这半生唯美的和声
下一篇: js openWin详解 滚动条
落落的天堂
博客等级 码龄15年 470粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值