overload重载与override重写的区别

https://www.cnblogs.com/east7/p/10739781.html

本文聊聊Overload和Override的区别。Overload的方法是否可以改变返回值的类型。

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法,这相当于把父类中的方法给覆盖了,这也是多态性的一种表现。

重载overload的特点就是与返回值无关,只看参数列表,所以重载的方法可以改变返回值类型。所以,如果两个方法的参数列表完全一样,是不能通过让它们的返回值类型不同来实现重载的。我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

override是覆盖一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。关于覆盖的方法的标志必须和被覆盖的方法,在重写时要注意以下的几点:

  1. 二者的标志完全匹配才能达到覆盖的效果;
  2. 返回值必须一致;
  3. 所抛出的异常必须一致或者是其子类;
  4. 被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同类型的输入参数来区分这些方法,然后再调用时,JVM就会根据不同的参数样式,来选择合适的方法执行。在使用重载时要注意以下的几点:

  1. 只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
  2. 不能通过访问权限、返回类型、抛出的异常进行重载;
  3. 方法的异常类型和数目不会对重载造成影响;
  4. 对于继承来说,如果某一方法在父类中的访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

方法的重写和重载是JAVA多态性的不同表现。重写是父类与子类之间多态的一种表现,而重载是一个类中多态性的一种表现。

原文地址:https://www.cnblogs.com/swordsman180309/p/12239232.html

时间: 2024-11-05 18:48:10

overload重载与override重写的区别的相关文章

Java中的Overload(重载)与Override(重写、覆盖)

java中的方法重载发生在同一个类中两个或者多个方法的方法名相同但是参数不同的情况,方法重载是指子类与父类之间子类重新定义了父类的方法,重写的方法与原方法签名.返回值.参数完全相同.Overload(重载) 重载Overload是一个类中多态性的一种表现,是编译时的多态性.方法重载是让类以统一的方式处理不同类型数据的一种手段.重载发生在同一个类中.同名的方法如果有不同的参数列表(参数个数.类型)则视为重载. java方法的重载,就是可以在类中创建多个方法,这些方法具有相同的名字,但具有不同的参数

面向过程和面向对象的区别,方法重载和方法重写的区别

先有面向过程,而后退出面向对象 面向过程和面向对象两者都是软件开发思想,先有面向过程,后有面向对象.在大型项目中,针对面向过程的不足推出了面向对象开发思想. 打个比方 蒋介石和毛主席分别是面向过程和面向对象的杰出代表,这样充分说明,在解决复制问题时,面向对象有更大的优越性. 面向过程是蛋炒饭,面向对象是盖浇饭.盖浇饭的好处就是"菜""饭"分离,从而提高了制作盖浇饭的灵活性.饭不满意就换饭,菜不满意换菜.用软件工程的专业术语就是"可维护性"比较好,

java面向对象中的方法重载与方法重写的区别

一.方法重载(overload) a:一个类中允许声明多个方法 b:一个类中允许有多个方法名称一样,但是参数不同的多个方法.通过参数不同来区别不同的方法. 参数不同表现为: 1:参数个数不同 2:参数类型不同 3:参数类型的顺序不同也是参数类型不同 4:在参数类型一样的情况下,名称不一样不代表参数不一样 重载方法的调用: 1:根据调用的时候实际参数来判断到底调用的是哪一方法 2:根据参数的要求,严格匹配传入的对应类型 3:如果严格匹配不到的话,默认遵循就近匹配 4:根据数据默认转换的顺序就近匹配

AJPFX总结方法重载与方法重写的区别

方法重载在同一个类中,可以出现同名方法,但是这些同名方法的参数列表必须不同,这样定义方法叫做方法重载.方法重载的特点重载的注意事项重载与返回值无关重载与具体的变量标识符无关重载只与方法名与参数相关重载方法方法名必须相同重载方法参数必须不同:参数个数不同参数类型不同参数顺序不同 方法重写(方法重载是在一个类里) 严格检查方法的格式 @Override 方法重写 @Overload方法重载   在方法前添加概念当子类继承父类后,拥有了父类非私有的方法并可以直接调用.但是子类可以按照子类自身的逻辑重新

方法重载和方法重写的区别

区别点 重载 重写(覆写) 英文 overloading overriding 定义 方法名称相同,参数的类型或个数不同: 对权限没有要求 方法名称,参数类型,返回值类型全部相同 范围 发生在一个类中 发生在继承类中 原文地址:https://www.cnblogs.com/jasonboren/p/11052046.html

重载(overload)、覆盖(override)、隐藏(hide)的区别

这三个概念都是与OO中的多态有关系的.如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了,下面说说它们的区别吧. 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同.调用的时候根据函数的参数来区别不同的函数. 覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现.即函数名和参数都一样,只是函数的实现体不一样. 隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了.隐藏与另外两个概念表面上看来很像,很难区分,其实他们的关键区别就

重载和重写的区别与联系

这三个概念都是与Java中的多态有关系的.如果单是区别重载与覆盖这两个概念是比较容易的,但是隐藏这一概念却使问题变得有点复杂了, 下面说说它们的区别吧.        重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同.调用的时候根据函数的参数来区别不同的函数. 覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现.即函数名和参数都一样,只是函数的实现体不一样. 隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了.隐藏与另外两个概念表面上看来很像,很难区分,

C++中overload,override,overwrite的区别详细解析

以下是对C++中overload,override,overwrite的区别进行了详细的分析介绍,需要的朋友可以过来参考下 Overload(重载):在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型.顺序不同),即函数重载.(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无. Override(覆盖):是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类):(2)函数名字相同

Java的重载和重写的区别

今天做题一脸蒙:原以为理解的挺深的,看来不仅要学会,换药灵活运用.以下是搜集整理的重载和重写的区别: 1.首先是书写:重载英文为overload  ,重写为 override . 2.然后是定义: (1)重载的定义是:方法名相同,参数类型不同或参数个数不同或参数顺序不同,就可以构成重载.这里注意没有规定方法返回值和修饰符,防止陷阱奥. (2)重写(又叫覆盖或复写):方法名相同,返回值类型相同,参数列表相同.  这里注意没有规定修饰符奥. 3.权限:   重载对权限没有要求: 重写的权限是:被子类