重载是指方法的名称相同,但是参数列表不相同的情形,这样的同名不同参数的方法之间,互相称之为重载方法。当我们调用的时候,虽然方法名字相同,但根据参数表可以自动调用对应的方法,使代码结构清晰。
一,几种可以构成重载的情况
public class TestOverload {
public static void main(String[] args) {
TestOverload to = new TestOverload();
to.add(2,3);
to.add(22,9, 85);
to.add(2.2,5);
to.add(1, 2.5);
}
public int add(int a,int b) {
return a+b;
}
//参数个数不同,构成重载
public int add(int a,int b,int c) {
return a+b+c;
}
//参数类型不同,构成重载
public double add(double a,int b) {
return a+b;
}
//参数顺序不同,构成重载
public double add(int a,double b) {
return a+b;
}
}
二.不定长参数 方法
不定长参数的语法格式 :
访问修饰符 返回值 方法名(参数数据类型 … 参数名称)
public class TestOverload {
public static void main(String[] args) {
TestOverload to = new TestOverload();
int a = to.add(2,3,5,1,2,5,7); //编译通过 25
System.out.println(a);
//另外通过定义了返回值的方法返回的结果可以直接进行运算。
int b = to.add(8,2)+40;
System.out.println(b); //50
}
public int add(int ...a) {
int result =0;
for(int index = 0;index<a.length;index++) {
result+=a[index];
}
return result;
}
}
其实这种不定长的参数就是一个数组 编译器会将(int…a)看成是(int a[]),可以使用循环遍历出存储在这个数组中的每个元素进行操作。
三.几种不能构成重载的情况
public class TestOverload {
public static void main(String[] args) {
TestOverload to = new TestOverload();
}
public int add(int a,int b) {
return a+b;
}
/**编译器报错,只有形参名称不同,不构成重载,编译器不知道该调用哪个方法*/
// public int add(int d,int e) {
// return a+b;
// }
//}
/**编译器报错,只有返回值类型不同,不构成重载,因为int值可以自动转化为double 编译器不知道该调用哪个方法*/
// public double add(int a,int b) {
// return a+b;
// }
}