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. Ansible角色

    Ansible角色介绍 官方地址: https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html 角色目录 ...

  2. JMeter学习篇(一):测试实例讲解

    1.JMeter的下载与安装 Jmeter官方下载地址:http://jmeter.apache.org/download_jmeter.cgi,下载jmeter是一个zip压缩包,解压后,直接运行a ...

  3. spark-sql中的分析函数的使用

    分析函数的应用场景: (1)用于分组后组内排序 (2)指定计算范围 (3)Top N (4)累加计算 (5)层次计算 分析函数的一般语法: 分析函数的语法结构一般是: 分析函数名(参数)  over  ...

  4. MapReduce分区数据倾斜

    什么是数据倾斜? 数据不可避免的出现离群值,并导致数据倾斜,数据倾斜会显著的拖慢MR的执行速度 常见数据倾斜有以下几类 1.数据频率倾斜   某一个区域的数据量要远远大于其他区域 2.数据大小倾斜  ...

  5. delphi xe10 麦克风、摄像头操作

    TakePhotoFromCameraAction1: TTakePhotoFromCameraAction; // 通过手机摄像头获取图片TakePhotoFromLibraryAction1: T ...

  6. Zookeeper_ZAB协议

    ZAB协议 ZAB协议简介 ZAB:(Zookeeper Atomic Broadcast),zk原子消息广播协议,是专为ZK设计的一中支持崩溃恢复的原子广播协议,是一种Paxos协议的优化算法,在Z ...

  7. Session监听类HttpSessionListener介绍及在listener里取得request

    Session监听类HttpSessionListener介绍及在listener里取得request servlet-api.jar中提供了监听类HttpSessionListener,主要方法有两 ...

  8. 在 input 的 placeholder中 使用iconfont

    写在前面 产品要求放大镜和文字放在一起.用定位,位置不准确,就会导致手机上错位,丑的一批. 进入正题 如何在input的 placeholder 中使用图标呢? 以阿里巴巴的矢量图标库为例, 现在有三 ...

  9. BZOJ随即跳题-随即到什么题你写什么题

    来挑战一下吧~ 请事先登录你BZOJ的账号!

  10. struts漏洞处理--老项目struts版本升级遇到的问题

    struts漏洞S2-016被扫描出,要求升级struts版本,查看生产struts版本2.0.12,该漏洞影响版本2.3.15以下,上网搜索,struts2.5以上的要求jdk1.7,由于项目过老, ...