JAVA 方法的重载


方法重载

java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致

重载的好处

  1. 减轻了起名的麻烦
  2. 减轻了记名的麻烦

重载的注意事项

  1. 方法名:必须相同

  2. 形参列表:必须不同

    • 形参类型个数,或顺序必须有一个不一样参数名无要求

      public void calculate(int n1,int n2) {
          int ret =n1+n2;
          System.out.println("有两个整数形参的calculate被调用");
          System.out.println(n1+ "+" + n2 +"=" + ret);
      }
      
      // 以下没有构成重载,而是方法的重复定义
      // public void calculate(int a,int n2) {
      //     double ret =n1+n2;
      //     System.out.println(n1+ "+" + n2 +"=" + ret);
      // }
  3. 返回类型:无要求

    public void calculate(int n1,int n2) {
        int ret =n1+n2;
        System.out.println("有两个整数形参的calculate被调用");
        System.out.println(n1+ "+" + n2 +"=" + ret);
    }
    //   以下没有构成重载,而是方法的重复定义,改变返回值类型,
    //   并没有作用到判断到底调用那个方法
    //   public intvoid calculate(int a,int b) {
    //       int ret =n1+n2;
    //       return ret;
    //   }

重载练习

题目:

编写程序,类 Methods 中定义三个重载方法并调用。方法名为 m。 三个方法分别接收一个 int 参数、两个 int 参数、一个字符串参数。分别执行平方运算并输出结果, 相乘并输出结果,输出字符串信息。在主类的 main ()方法中分别用参数区别调用三个方法

package Object_Practice;

public class OverLoadExercise {
    public static void main(String[] args) {
        Method method = new Method();
        method.m(2);//4
        method.m(2,3);//6
        method.m("我真的很不错");
    }
}


class Method{
    public void m(int num) {
        int ret =num * num;
        System.out.println(num+"的平方="+ret);
    }
    
    public void m(int num1, int num2) {
        int ret = num1 * num2;
        System.out.println(num1+ "*"+ num2 + "=" + ret);
    }
    
    public void m(String str) {
        System.out.println("传入是String"+str);
    }
}

题目:

定义三个重载方法 max(),第一个方法,返回两个 int 值中的最大值,第二个方法,返回两个 double 值中的最大值,第三个方法返回三个 double 值中的最大值,并分别调用三个方法

package Object_Practice;

public class OverLoadExercise {
    public static void main(String[] args) {
        /*
         * 重载练习1,进行计算
         */
        System.out.println("重载练习题一");
        Method method = new Method();
        method.m(2);//4
        method.m(2,3);//6
        method.m("我真的很不错");
        
        
        System.out.println("=========");
        System.out.println("重载练习题二");
        
        /*
         * 重载练习2
         */
        System.out.println("max=" + method.max(10, 20) );
        System.out.println("max=" + method.max(1.1, 2.2));
        System.out.println("max=" + method.max(1.1, 2.2,3.3));
    }
}


class Method{
    /*
     * 重载练习1
     */
    public void m(int num) {
        int ret =num * num;
        System.out.println(num+"的平方="+ret);
    }
    
    public void m(int num1, int num2) {
        int ret = num1 * num2;
        System.out.println(num1+ "*"+ num2 + "=" + ret);
    }
    
    public void m(String str) {
        System.out.println("传入是String"+str);
    }
    
    /*
     * 重载练习2
     * 返回最大值
     */
    
    public int max(int num1 , int num2) {
        return num1 > num2? num1:num2; 
    }
    
    public double max(double num1 , double num2) {
        return num1 > num2? num1:num2; 
    }
    
    
    public double max(double num1 , double num2,double num3) {
        double max = num1 > num2? num1:num2;
        return max>num3 ? max:num3;
    }
}

注意

  • 方法重载,优先匹配不需要强制转换的重载方法