重载的定义
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
简单来说就是:“两同一不同”。即同一个类、相同的方法名(两同)参数列表不同:参数个数不同,参数类型不同(一不同)
判断方法是否构成重载:
跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
重载举例
public class test {
public static void main(String[] args) {
Num num = new Num();
num.getSum(1.1, 3);
}
}
class Num{
public void getSum(int i, int j){
System.out.println(i + j);
}
// 注意形参类型声明的先后顺序,
// 顺序不同也可以构成重载
public void getSum(double i, int j){
System.out.println(i + j);
}
public void getSum(int i, double j){
System.out.println(i + j);
}
public void getSum(double i, double j, int m){
System.out.println(i + j + m);
}
}
上述四个方法,方法名一样,但是形参列表不同,因此构成重载。注意下面两个方法不认为构成重载,且程序会报错(形参列表相同,和返回值类型无关):
class Num{
public void getSum(int i, int j){
System.out.println(i + j);
}
public int getSum(int i, int j){
return i + j;
}
}
但是下面两种方法构成重载(形参列表不同,和返回值无关)
class Num{
public void getSum(int i, int j){
System.out.println(i + j);
}
public double getSum(double i, int j){
return i + j;
}
}
可变个数的形参
有时,方法的形参列表可能是多个类型相同的变量,为了书写的方便,在JDK 5.0新增了可变个数形参的机制,允许直接定义能和多个实参相匹配的形参,从而可以用一种更简单的方式,来传递个数可变的形参。
JDK5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public void test (String[] args);
JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public void test (String…args);
具体使用注意点:
- 可变个数形参的格式:数据类型…变量名
- 当调用可变个数形参的方法时,传入的参数个数可以是:0个,1个,2个,…
- 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
- 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能同时存在
- 可变个数形参在方法的形参中,必须声明在未尾
- 可变个数形参在方法的形参中,最多只能声明一个可变形参。
例如:
public class testClass{
public static void main(String[] args) {
testClass test = new testClass();
test.show(100);
test.show("hello");
test.show("hello", "world", "酷狗");
}
public void show(int i){
System.out.println("int " + i);
}
public void show(String s){
System.out.println("String " + s);
}
public void show(String ... strs){
for(int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
}
}