天天看点

23 方法的重载(overload)

问题

之前已经写了一个方法sumInt用来计算两个int类型数字的和,如果要是想计算两个float类型数字的和呢?ok,那就再来写一个sumFloat方法,除此之外,还有long类型,double类型,如果每种类型都要进行求和计算的话,就会像下面这种情况写4个方法了。

public class MethodTest{

    public static void main(String[] args){

        System.out.println(sumInt(10,20));

        System.out.println(sumDouble(1.0,2.0));

        System.out.println(sumLong(10L,20L));

        System.out.println(sumFloat(1.0F,2.0F));

    }

    public static int sumInt(int a,int b){

        return a + b;

    }

    public static double sumDouble(double a,double b){

        return a + b;

    }

    public static long sumLong(long a,long b){

        return a + b;

    }

    public static float sumFloat(float a,float b){

        return a + b;

    }

}
           

方法重载(overload)

上面程序有缺点,定义的4个方法,功能上都是计算两个数字的和,只不过传入的参数

类型不同,调用者在调用的时候,需要记忆每个方法的名字,并且需要自己根据传入

参数的类型来判断调用相应的方法,这样使用起来不是很方便,那为了使用方便,我

们来改造一下上面的代码。

public class MethodTest{

    public static void main(String[] args){

        System.out.println(sum(10,20));

        System.out.println(sum(1.0,2.0));

        System.out.println(sum(10L,20L));

        System.out.println(sum(1.0F,2.0F));

    }

    public static int sum(int a,int b){

        return a + b;

    }

    public static double sum(double a,double b){

        return a + b;

    }

    public static long sum(long a,long b){

        return a + b;

    }

    public static float sum(float a,float b){

        return a + b;

    }

}
           

上面将之前的代码里面的4个方法名全部改成一样的了,这种情况叫做方法重载(overload)。

方法重载发生的条件

1 发生在同一个类中.

2 方法名相同

3 参数列表不同(类型,个数,顺序)

注意:

方法重载和返回值类型无关

方法重载和方法的修饰符列表无关。

//参数的类型不同,构成重载
public static void m1(int a){}
public static void m1(double a){}

//参数的个数不同,构成重载
public static void m2(int a,int b){}
public static void m2(int a){}

//参数的顺序不同,构成重载,不过开发中不这样使用    
public static void m3(int a,double b){}
public static void m3(double a,int b){}

//以下两个m4方法并没有构成重载.
//两个方法完全一样,错误
//public static void m4(int a){}
//public static void m4(int b){}


/*
方法的重载和方法的返回值类型无关,不构成重载
public static void m5(){}
public static int m5(){
    return 100;
}
*/


/*
方法的重载和方法的修饰符列表无关,不构成重载
static void m6(){}
public static void m6(){}
*/
           

请问System.out.println()这个方法是否构成重载?

构成重载

System.out.println(1024);//传入int类型
    System.out.println(10.24);//传入double类型    
    System.out.println(true);//传入boolean类型
    System.out.println('m');//传入字符类型
    System.out.println("monkey1024.com");//传入字符串类型
           

继续阅读