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 进程间通信 有名管道(fifo)

    有名管道特点: 1)无名管道只能用于具有亲缘关系的进程之间,这就限制了无名管道的使用范围 2)有名管道可以使互不相关的两个进程互相通信. 3)有名管道可以通过路径名来指出,并且在文件系统中可见,但内容 ...

  2. loop find column

    declare l_sql varchar2(500); -- variable that contains a query l_c sys_refcursor; -- cursor variable ...

  3. day05 mysql pymysql的使用 (前端+flask+pymysql的使用) 索引 解释执行 慢日志 分页性能方案

    day05 mysql pymysql   一.pymysql的操作     commit(): 在数据库里增删改的时候,必须要进行提交,否则插入的数据不生效       1.增, 删, 改  #co ...

  4. pandas-append()

    DataFrame.append(self,other,ignore_index = False,verify_integrity = False,sort = Nore) 作用是将其他对象附加到调用 ...

  5. SCOI 2014 new :未来展望

    后期计划(可能延续到noip) 后期计划这种东西..唉...经历了三周的停课生涯,我似乎已经找到了一种状态,就是我一直期盼的状态,然后为了不落泪退役,具体是这样的: 由于现在的学习任务不太紧张了,所以 ...

  6. ueditor使用心得

    UEditor使用手册 配置jdk 1.6+ Apache Tomcat6.0+ Ueditor官网下载 部署 安装好jdk和apache后,我们开始部署代码 我们在apache的安装目录下,找到we ...

  7. java中get请求的中文乱码问题

    表单采用Get方式提交,解决乱码的方法为:     方式一:手动解码         param = new String(param.getBytes("iso8859-1"), ...

  8. faster-rcnn代码阅读-roi-data层

    这一节讲述roi-data层,和这一层有关的结构图如下: roi-data层的prototxt定义如下: layer { name: 'roi-data' type: 'Python' bottom: ...

  9. 剑指offer——34之字打印二叉树

    题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推.   题解: 与上道题没区别,就是在存入数据时 ...

  10. MySQL初步理解,简易单表增删改查

    什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt ...