Java的重载以及与重写的区别

一、什么是方法重载

  方法的重载就是在同一个类中,有着若干个名字相同的方法。在具体调用这些方法的时候,通过传递参数的不同来调用这些重载方法。

二、为什么需要方法重载

  1. 方法名的定义需要做到见名知意,功能类似的方法一定程度上注定了方法名的相同,重载的使用有好的解决了这种因见名知意带来的方法名冲突。
  2. 重载可以提高代码的可读性和可维护性。方法名相同的方法在一起能够清晰知道每一个方法的区别,提高代码可读性,也方便后期的代码维护。

三、方法重载的规则

  1. 方法名必须相同
    public static int add(int a){
            return a+1;
        }
    public static int add(int a,int b){
            return a+b;
        }
    public static int add(int a,int b,int c){
            return a+b+c;
        } 
    方法名必须相同,比如这里的add()方法,如果第二个add()方法改成add2()那就不是方法重载了。
  2. 方法的参数列表必须不相同。(方法的参数列表包括方法的参数个数以及参数类型和参数顺序)
    1. 参数个数不相同,还是上面代码:   
      public class Myclass {
      
          public static int add(int a){
              return a+1;
          }
          public static int add(int a,int b){
              return a+b;
          }
          public static int add(int a,int b,int c){
              return a+b+c;
          }
      
          public static void main(String[] args) {
              System.out.println(add(1));
              System.out.println(add(1,2));
              System.out.println(add(1,2,3));
          }
      } 
      

       运行结果如下:

      2
      3
      6
      

       

    2. 参数类型不相同
      public class Myclass {
      
          public static void add(int a,int b){
              System.out.println(a+b);
          }
          public static void add(double a,double b){
              System.out.println(a+b);
          }
          public static void main(String[] args) {
              add(1,2);
              add(1.2,2.3);
          }
      }

      运行结果:

      3
      3.5
      

      这里的参数不同,一个是int类型的参数,一个是double类型的参数,满足重载的条件

    3. 参数顺序不同也可以满足重载
      public class Myclass {
      
          public static double add(double b,int a){
              return a+b;
          }
          public static double add(int a,double b){
              return a*b;
          }
          public static void main(String[] args) {
              System.out.println(add(1.2,2));
              System.out.println(add(2,2.0));
          }
      }

      运行结果:

      3.2
      4.0
      

      这里对参数顺序进行调换位置,编译器依旧能够找到对应的方法。

    4. 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨。

四、方法重载的注意事项

  • 方法的返回类型可以相同也可以不相同。

    这里让参数保持一致,改变方法类型。根据IDEA提示发现无法在参数一致的时候通过方法返回类型来进行方法重载

     

     当适当的改变方法参数,代码如下,编译通过。

    public class Myclass {
    
        public static int add(int a,int b){
            return a+b;
        }
        public static double add(int a,double b){
           return a+b;
        }
        public static void main(String[] args) {
            System.out.println(add(1,2));     //输出3
            System.out.println(add(1,2.0));   //输出3.0
        }
    }
    

      由上可知,方法重载的关键是在参数列表上,仅仅返回类型不同不足以称为方法的重载,方法的返回类型可以相同也可以不相同。

  • 方法的修饰符并不影响方法的重载。
    我们改变上例中方法的修饰符。结果正常输出:
    public class Myclass {
    
        public static int add(int a,int b){
            return a+b;
        }
         static double add(int a,double b){
           return a+b;
        }
        public static void main(String[] args) {
            System.out.println(add(1,2));         //输出3
            System.out.println(add(1,2.0));       //输出3.0
        }
    }
  • main方法也可以被重载。
    public class Myclass {
        public static void main(String name) {
            System.out.println(name+"你好");
        }
        public static void main(String[] args) {
            main("ThreePure");
        }
    }
    

    main方法可以重载,只不过虚拟机只调用带字符串公共类型的main方法,public static void main(String[] args){}。

五、方法重载与方法重写的区别

 
  重载 重写
相同 方法名称相同
英文 Overloading Overiding
范围 同一个类  继承中的子类
区别 需要参数列表不同 只有方法体不同,方法列表也必须相同
其他要求 对修饰符,返回值类型没有特殊要求 对权限等其他都有特定要求

  区别重载和重写的最好的判断方法就是是否出现在继承中,以及参数列表是否必须完全相同。

 

posted @ 2020-09-23 10:26  三淳  阅读(449)  评论(0编辑  收藏  举报