首页 > 编程笔记 > Java笔记 阅读:12

Java方法重载(附带实例,新手必看)

在 Java 程序中,方法的重载就是在同一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。

为了更好地解释重载,来看一个实例,编写不同形式的加法运算方法。创建 OverLoadTest 类,在该类中编写 add() 方法的多个重载形式,然后在主方法中分别输出这些方法的返回值。
public class OverLoadTest {
    public static int add(int a, int b) { //定义一个方法
        return a + b;
    }
    public static double add(double a, double b) { //与第一个方法名称相同、参数类型不同
        return a + b;
    }
    public static int add(int a) { //与第一个方法参数个数不同
        return a;
    }
    public static int add(int a, double b) { //先 int 参数,后 double 参数
        //输出 int 参数值
        return a;
    }
    public static int add(double a, int b) { //先 double 参数,后 int 参数
        //输出 int 参数值
        return b;
    }

    public static void main(String args[]) {
        System.out.println("调用 add(int,int)方法:" + add(1, 2));
        System.out.println("调用 add(double,double)方法:" + add(2.1, 3.3));
        System.out.println("调用 add(int)方法:" + add(1));
        System.out.println("调用 add(int,double)方法:" + add(5, 8.0));
        System.out.println("调用 add(double,int)方法:" + add(5.0, 8));
    }
}
运行结果如下:
调用add(int,int)方法:3
调用add(double,double)方法:5.4
调用add(int)方法:1
调用add(int,double)方法:5
调用add(double,int)方法:8
程序中分别定义了 5 个方法,在这 5 个方法中:
下图表明了所有可以构成重载的条件:


图 1 构成方法重载的条件

注意,虽然在方法重载中可以使两个方法的返回类型不同,但只有返回类型不同并不足以区分两个方法的重载,还需要通过参数的个数以及参数的类型来设置。

根据图 1 所示的构成方法重载的条件,可以总结出编译器是利用方法名、方法各参数类型和参数的个数、参数的顺序来确定类中的方法是否唯一。方法的重载使得方法以统一的名称被管理,使程序代码更有条理。

在谈到参数个数可以确定两个方法是否具有重载关系时,会想到定义不定长参数方法。不定长方法的语法如下:
返回值 方法名(参数数据类型…参数名称)

尝试在上面的实例中添加不定长参数的方法:
public class OverLoadTest2 {
    public static int add(int a, int b) {
        return a + b;
    }
    public static double add(double a, double b) {
        return a + b;
    }
    public static int add(int a) {
        return a;
    }
    public static int add(int a, double b) {
        return a;
    }
    public static int add(double a, int b) {
        return b;
    }
    public static int add(int ... a) { //定义不定长参数方法
        int s = 0;
        for (int i = 0; i < a.length; i++) { //根据参数个数做循环操作
            s += a[i]; //对每个参数进行累加
        }
        return s; //返回计算结果
    }

    public static void main(String args[]) {
        System.out.println("调用 add(int,int)方法:" + add(1, 2));
        System.out.println("调用 add(double,double)方法:" + add(2.1, 3.3));
        System.out.println("调用 add(int)方法:" + add(1));
        System.out.println("调用 add(int,double)方法:" + add(5, 8.0));
        System.out.println("调用 add(double,int)方法:" + add(5.0, 8));

        //调用不定长参数方法
        System.out.println("调用不定长参数方法:" + add(1, 2, 3, 4, 5, 6, 7, 8, 9));
        System.out.println("调用不定长参数方法:" + add(1));
    }
}
运行结果如下:
调用add(int,int)方法:3
调用add(double,double)方法:5.4
调用add(int)方法:1
调用add(int,double)方法:5
调用add(double,int)方法:8
调用不定长参数方法:45
调用不定长参数方法:1
在上述实例中,在参数列表中使用“…”的形式定义不定长参数,其实这个不定长参数 a 就是一个数组,编译器会将“int…a”这种形式看作是“int[] a”,因此在 add() 方法体做累加操作时使用了 for 循环语句,在循环中是根据数组 a 的长度作为循环条件的,最后返回累加结果。

相关文章