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. 笔记44 Hibernate快速入门(一)

    一.Hibernate简介 Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象. Hibernate 架构是分层的,作为数据访问层,你不 ...

  2. matlab计时超好用

    方法一: profile on <body?> profile viewer 会把所有代码的时间,都显示出来,每行每个函数用时统计,一目了然: 方法二: tic; <body-par ...

  3. (一)环境搭建——Django

    实验环境准备: 安装django # cmd中 pip install Django 第一个django项目HelloWorld # 在D:/Python test 下创建一个helloworld项目 ...

  4. js 数组 常用方法

    let arr=[{a:1},{a:2},{a:3}];//forEach 数组循环// 返回void arr.forEach(i=>{ // i为arr中的元素 }) //filter 数组过 ...

  5. C# 模拟http请求网页数据 [网页爬虫]

    using System; using System.Collections.Specialized; using System.IO; using System.Linq; using System ...

  6. nodejs的npm修改源

    在国内用npm install时,速度总是不尽如人意,解决办法是修改npm的数据源 npm config set registry https://registry.npm.taobao.org 修改 ...

  7. leetcood学习笔记-101-对称二叉树

    题目描述: 方法一:递归: class Solution: def isSymmetric(self, root: TreeNode) -> bool: if not root: return ...

  8. 解析Spring第四天(Spring中的事物、Spring框架来管理模板类)

    JDBC模板技术: Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 template 模板 都是Spring框架提供XxxTemplate 提供了JDBC模板,Sp ...

  9. Typora使用入门

    使用sublime编写markdown语法不太方便,使用专门的markdown编辑软件会更方便一些! 1.typora常用快捷键 ctrl + /     切换编辑语法模式/预览模式 ctrl + 1 ...

  10. 限时免费 GoodSync 10 同步工具【转】

    一款不错的软件,正在开发本身的云盘,要是能够云执行任务就更好了! GoodSync 10是一种简单和可靠的文件备份和文件同步软件.它会自动分析.同步,并备份您的电子邮件.珍贵的家庭照片.联系人,.MP ...