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
:重写重写父类所属方法

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值