Java-方法的重载(overload)

305 阅读1分钟

方法的重载:

当一个类中出现了 方法名相同,形参列表不同的两个或多个方法,称为的方法的重载。
关键词:(1). 方法名相同。(2). 形参列表不同

image.png

方法重载的原则:
(1)先找最匹配的
  实参的个数和类型与形参的个数和类型一样的。
(2)再找能够兼容的
  形参的类型可以兼容实参的类型(自动类型提升)或 形参的个数可以兼容实参的个数(可变参数)
 (3)如果最匹配的没有,兼容的也没有,就编译报错 如果匹配的多个可以兼容的方法,也会编译报错

public class TestOverload {
    public static void main(String[] args) {
        TestOverload t = new TestOverload();

        System.out.println(t.max(4, 5));
        System.out.println(t.max(4.5, 5.3));
        System.out.println(t.max(4,5,6));
        System.out.println(t.max(4,5,6,8,9));

        System.out.println("--------------------");
        System.out.println(t.max(5, 2.3));// max(double a, double b)  形参double a兼容int类型的5

        System.out.println("-----------------------");
       // System.out.println(t.max(1.2, 2.3, 5.6, 8.5));//编译报错
        /*
        个数上,只有int max (int... nums)可以接收它
        但是它的类型又无法接收  double > int类型,不能兼容
         */
    }

    //求两个整数的最大值
    int max(int a, int b){
        System.out.println("TestOverload.max(int a,int b)");
        return a>b?a:b;
    }

    //求三个整数的最大值
    int max(int a, int b,int c){
        /*int big = a > b ? a : b;
        big = big > c ? big : c;
        return big;*/

  /*      int big = max(a,b);
        big = max(big, c);
        return big;*/
        System.out.println("TestOverload.max(int a,int b, int c)");
        return max(max(a,b),c);
    }

    //求两个小数的最大值
    double max(double a, double b){
        System.out.println("TestOverload.max(double a, double b)");
        return a > b ? a : b;
    }

    //求n个整数最大值
    int max (int... nums){
        System.out.println("TestOverload.max(int... nums)");
        int max = nums[0];
        for (int i = 1; i < nums.length; i++) {
            max = max(max, nums[i]);
        }
        return max;
    }