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
- public class WarppedSessionListener implements HttpSessionListener {
- public static void test(String name){
- System.out.println("方法name:"+name);
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- 10. test("main");
- 11. }
- 12.
- 13. @Override
- 14. public void sessionCreated(HttpSessionEvent sessionEvent) {
- 15. test("sessionCreated");
- 16. }
- 17.
- 18. @Override
- 19. public void sessionDestroyed(HttpSessionEvent sessionEvent) {
- 20.
- 21. test("sessionDestroyed");
- 22.
- 23. }
24. }
上面的@override是什么意思呢?结合类来看,肯定一目了然就是说,该类的该方法实现了接口的方法。所以可以说叫:实现-实现了接口方法。
接下来看看overload:重载 overwrite:重写的区别
[java] view plain copy
- //父类
- public class FatherClass {
- public void test(){
- System.out.println("father test method");
- }
- }
- //子类
- 10.
11. public class ChildClass extends FatherClass {
- 12. @Overwrite //重写父类方法
- 13. public void test(){
- 14. System.out.println("Child test method");
- 15. }
- 16. @Overload //类内部方法-重载
- 17. public void test(String name){
- 18. System.out.println("This is a Overload method!");
- 19. }
- 20. /*
- 21. //以下编译不通过
- 22. @Overload
- 23. public String test(String name){
- 24. System.out.println("This is a Overload method!");
- 25. return "";
- 26. }
- 27. */
28. }
以上代码直接明了可以得出结论:重写就是把父类方法重写。重载是在一个类内部实现同一个方法名但不同入参名的多个方法。
梳理下最终得出结论:
override:覆写是对接口方法名实现
overload:重载同一个类里同一个方法名,有不同入参
overwrite:重写重写父类所属方法