Override,Overload傻傻分不清?

「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战

前言

 大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。
复制代码

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

 本文主要介绍Java中的方法重载(Overload)和重写(Override)。
复制代码

方法重载和重写

1. 方法重载

方法重载:方法的名称相同,参数列表不同,与返回值类型无关。

参数列表不同有以下几种情况:

  • 参数个数相同,类型不同。
  • 参数个数不同,类型相同或不同。
  • 参数为多个类型时顺序不同。

实例展示:

 public class OverloadTest {
     public static void main(String[] args) {
         System.out.println(sum(1,2));
         System.out.println(sum(2,3));
     }
     public static int sum(int a,int b){
         return a + b;
     }
     public static int sum(int a,int b,int c){
         return a + b +c;
     }
 }
复制代码

使用方法重载可以很方便的使用相同的方法名完成许多不同的类似的功能。

使用相同的方法名时,JVM会根据传入的参数的情况选择重载的方法,一个很关键的点就是JVM选择方法时不能产生二义性。

2. 方法重写

方法重写(覆盖,覆写):

  1. 子类中的方法和父类中的方法名相同并且参数列表也相同,
  2. 子类方法的返回值范围要比父类的方法的返回值范围要小。(例如父类方法返回值为object,子类方法的返回值为int,这种情况可以,但是反过来就会报错。)
  3. 子类方法的权限修饰符必须大于等于父类的权限修饰符。(比如父类是public,那子类必须是public,如果父类是protected,那子类必须为protected或public)

如果符合了以上所有要求,那我们就说子类方法重写了父类方法。

方法重写的特点:

创建的是子类对象,则优先使用子类方法。(在多态的对象的向下转型时经常遇到)

实例展示:

 public class Father {
     public void speak(){
         System.out.println("我是父类!");
     }
 }
 public class Child extends Father{
     @Override
     public void speak(){
         System.out.println("我是子类!");
     }
 }
 import OverrideDemo.Child;
 import OverrideDemo.Father;
 ​
 public class OverrideTest {
     public static void main(String[] args) {
         Father child = new Child();
         child.speak();
     }
 }
复制代码

建议在重写的方法前写上@Override,可以帮助检查是不是真的是重写方法,避免写错。

结语

以上就是关于重载和重写的各自的特点和介绍,希望小伙伴们别再傻傻分不清了。如有不正之处,欢迎掘友们留言指正。

猜你喜欢

转载自juejin.im/post/7028746544106962974