Java方法重载(附带实例,新手必看)
在 Java 程序中,方法的重载就是在同一个类中允许存在一个以上的同名方法,只要这些方法的参数个数或类型不同即可。
为了更好地解释重载,来看一个实例,编写不同形式的加法运算方法。创建 OverLoadTest 类,在该类中编写 add() 方法的多个重载形式,然后在主方法中分别输出这些方法的返回值。
下图表明了所有可以构成重载的条件:

图 1 构成方法重载的条件
注意,虽然在方法重载中可以使两个方法的返回类型不同,但只有返回类型不同并不足以区分两个方法的重载,还需要通过参数的个数以及参数的类型来设置。
根据图 1 所示的构成方法重载的条件,可以总结出编译器是利用方法名、方法各参数类型和参数的个数、参数的顺序来确定类中的方法是否唯一。方法的重载使得方法以统一的名称被管理,使程序代码更有条理。
在谈到参数个数可以确定两个方法是否具有重载关系时,会想到定义不定长参数方法。不定长方法的语法如下:
尝试在上面的实例中添加不定长参数的方法:
为了更好地解释重载,来看一个实例,编写不同形式的加法运算方法。创建 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 个方法中:
- 前两个方法的参数类型不同,并且方法的返回值类型也不同,因此这两个方法构成重载关系;
- 前两个方法与第 3 个方法相比,第 3 个方法的参数个数少于前两个方法,因此这 3 个方法也构成了重载关系;
- 最后两个方法相比,发现除了参数的出现顺序不同,其他都相同,同样构成了重载关系。
下图表明了所有可以构成重载的条件:

图 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 的长度作为循环条件的,最后返回累加结果。