zoukankan      html  css  js  c++  java
  • overload和override二者之间的区别

    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.   
    3.     public static void test(String name){  
    4.         System.out.println("方法name:"+name);  
    5.     }  
    6.     /** 
    7.      * @param args 
    8.      */  
    9.     public static void main(String[] args) {  
    10. 10.         test("main");  
    11. 11.     }  
    12. 12.   
    13. 13.     @Override  
    14. 14.     public void sessionCreated(HttpSessionEvent sessionEvent) {  
    15. 15.         test("sessionCreated");  
    16. 16.     }  
    17. 17.   
    18. 18.     @Override  
    19. 19.     public void sessionDestroyed(HttpSessionEvent sessionEvent) {  
    20. 20.   
    21. 21.         test("sessionDestroyed");  
    22. 22.   
    23. 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.   
    9. //子类  
    10. 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
    :重写重写父类所属方法

  • 相关阅读:
    TeamViewer14
    mysql 导出表结构和表数据 mysqldump用法
    虚拟机中不能上外网
    Mysql初始化root密码和允许远程访问
    常用sql语句
    查看连接MYSQL数据库的IP信息
    设置linux下shell显示不同颜色的字体
    常用mysql导入导出数据的命令
    spring boot 以jar的方式启动常用shell脚本
    idea的properties文件乱码问题解决
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/7764779.html
Copyright © 2011-2022 走看看