overload和override三者之间的区别

Overload是重载,是有相同的方法名,但参数类型或个数彼此不同
Override是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,在子类中覆盖掉了父类的改方法。

 都是多态,一个是父子之间的事,一个是类里的事

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

2、override(重写,覆盖) 
(1)方法名、参数、返回值相同。 
(2)子类方法不能缩小父类方法的访问权限。 
(3)子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 
(4)存在于父类和子类之间。 
(5)方法被定义为final不能被重写。 
(6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

3、overload(重载,过载) 
(1)参数类型、个数、顺序至少有一个不相同。 
(2)不能重载只有返回值不同的方法名。 
(3)针对于一个类而言。 
(4)不能通过访问权限、返回类型、抛出的异常进行重载; 
(5)方法的异常类型和数目不会对重载造成影响;

4、override应用: 
(1)最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。 
(2)除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。

5、总结 
  override是在不同类之间的行为,overload是在同一个类中的行为。

梳理下最终得出结论:

override:覆写是对接口方法名实现

overload:重载同一个类里同一个方法名,有不同入参

overwrite:重写重写父类所属方法

很多人总是容易把这三个词搞混淆,有的人甚至认为三者之间没多大区别。其实区别还是很大的,而且彻底搞清楚这三者间的关系还是很重要的,对于理解类与类之间的关系、类与接口、类内部方法与方法间的关系以及理解java的多态性、继承性尤其重要。况且面试中偶尔还会被问到这三个词中的某两个。

先看看三个词分别代表什么含义:

override:覆写

overload:重载

overwrite:重写

接下来请看三者之间的区别:

[java] view plain copy

print?

  1. public class WarppedSessionListener implements HttpSessionListener {
  2. public static void test(String name){
  3. System.out.println("方法name:"+name);
  4. }
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. 10.         test("main");
  10. 11.     }
  11. 12.
  12. 13.     @Override
  13. 14.     public void sessionCreated(HttpSessionEvent sessionEvent) {
  14. 15.         test("sessionCreated");
  15. 16.     }
  16. 17.
  17. 18.     @Override
  18. 19.     public void sessionDestroyed(HttpSessionEvent sessionEvent) {
  19. 20.
  20. 21.         test("sessionDestroyed");
  21. 22.
  22. 23.         }

24. }

上面的@override是什么意思呢?结合类来看,肯定一目了然就是说,该类的该方法实现了接口的方法。所以可以说叫:实现-实现了接口方法。

接下来看看overload:重载 overwrite:重写的区别

[java] view plain copy

print?

  1. //父类
  2. public class FatherClass {
  3. public void test(){
  4. System.out.println("father test method");
  5. }
  6. }
  7. //子类
  8. 10.

11. public class ChildClass extends FatherClass {

  1. 12.     @Overwrite //重写父类方法
  2. 13.     public void test(){
  3. 14.         System.out.println("Child test method");
  4. 15.     }
  5. 16.     @Overload //类内部方法-重载
  6. 17.     public void test(String name){
  7. 18.         System.out.println("This is a Overload method!");
  8. 19.     }
  9. 20.     /*
  10. 21.     //以下编译不通过
  11. 22.     @Overload
  12. 23.     public String test(String name){
  13. 24.         System.out.println("This is a Overload method!");
  14. 25.         return "";
  15. 26.     }
  16. 27.     */

28. }

以上代码直接明了可以得出结论:重写就是把父类方法重写。重载是在一个类内部实现同一个方法名但不同入参名的多个方法。

梳理下最终得出结论:

override:覆写是对接口方法名实现

overload:重载同一个类里同一个方法名,有不同入参

overwrite:重写重写父类所属方法

overload和override二者之间的区别的更多相关文章

  1. 重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别

    覆盖:子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖. 重载:子类继承了父类的同名有参函数.当子类继承了父类的一个 ...

  2. overload和override的含义和区别

    重载(overload)和重写/覆盖(override)是Java多态性的不同表现形式. 重载(overload) (1) 重载是通过不同的方法参数来区分的,如不同的参数个数.顺序.类型. (2) 不 ...

  3. 面试问题之C++语言:Overload、Override及Overwirte的区别

    Overload(重载):在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型.顺序不同),即函数重载. 特点: (1)相同的范围(在同一个类中) (2)函数名 ...

  4. 从零开始学C++之继承(一):公有/私有/保护继承、overload/overwrite/override之间的区别

    一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...

  5. 公有/私有/保护继承、overload/overwrite/override之间的区别

    一.继承 C++很重要的一个特征就是代码重用.在C语言中重用代码的方式就是拷贝代码.修改代码.C++可以用继承或组合的方式来重用.通过组合或继承现有的的类来创建新类,而不是重新创建它们. 继承是使用已 ...

  6. C++中overload 、override、overwrite 之间的区别

    Overload(重载):在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型.顺序不同),即函数重载.(1)相同的范围(在同一个类中):(2)函数名字相同:( ...

  7. overload和override的区别(转)

    overload和override的区别 override(重写) 1.方法名.参数.返回值相同.2.子类方法不能缩小父类方法的访问权限.3.子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出 ...

  8. 【转】overload与override的区别

    [转]overload与override的区别 override(重写,覆盖) 1.方法名.参数.返回值相同. 2.子类方法不能缩小父类方法的访问权限. 3.子类方法不能抛出比父类方法更多的异常(但子 ...

  9. Overload和Override的区别 C++ Java

    Overload:顾名思义,就是Over(重新)——load(加载),所以中文名称是重载. 它可以表现类的多态性,可以是函数里面可以有相同的函数名但是参数名.返回值.类型不能相同: 或者说可以改变参数 ...

随机推荐

  1. linux安装lolcat实现彩色文字输出信息

    [root@localhost ~]# mount /dev/sr0 /media/[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch. ...

  2. Vue-cli开发笔记二----------接口调用、配置全局变量

    我做的一个项目,本身是没用任何框架,纯手写的前端及数据交互,项目已经完结.最近学Vue,于是借用这个项目,改装成vue项目. (一)接口问题:使用axios的调用方法,proxyTable解决开发环境 ...

  3. Aria2 Centos8 安装配置

    使用chkconfig 或者 chkconfig –list就可以看出当前系统已经设置的各个服务在各个运行级别下的开闭状态.如果我们想设置某个服务自启动或者关闭的话,那么只需要按照下面的格式使用即可 ...

  4. Keepalived+LVS+nginx搭建nginx高可用集群

    1. 环境准备 1. VMware; 2. 4台CentOs7虚拟主机:192.168.122.248,192.168.122.68, 192.168.122.110, 192.168.122.167 ...

  5. pycharm 2020 激活码 破解教程

    以下是安装完pycharm后进行破解!!   1.修改hosts,在hosts文件最后添加2行“0.0.0.0 account.jetbrains.com”和“0.0.0.0 www.jetbrain ...

  6. leetcode-回溯

    题17: 方法一:回溯 class Solution: def letterCombinations(self, digits: str) -> List[str]: res = [] dic ...

  7. Batch - call, start, goto 区别

    参考(待整理): 批处理命令——call 和 start

  8. 用jQuery基础

    要使用jQuery要引用jQuery文件,在头标签中引用 1 <script src="jquery-1.11.2.min.js"></script>   ...

  9. JavaScript中的节流和防抖

    节流: 在规定时间内,多次触发事件,但是只执行一次 场景:输入框搜索,地图渲染 优化用户体验 /** * 节流 规定时间内不管触发多少次只执行一次 * @param {Function} fn 实际要 ...

  10. 后缀自动机求字典序第k小的串——p3975

    又领悟到了一点新的东西,后缀自动机其实可以分为两个数据结构,一个是后缀树,还有一个是自动机 后缀树用来划分endpos集合,并且维护后缀之间的关系,此时每个结点代表的是一些后缀相同且长度连续的子串 自 ...