先看一段代码
public class MethoDemo01{
public static void main(String args[]){
int one = addOne(10,20) ; // 调用整型的加法操作
float two = addTwo(10.3f,13.3f) ; // 调用浮点数的加法操作
System.out.println("addOne的计算结果:" + one) ;
System.out.println("addTwo的计算结果:" + two) ;
}
// 定义方法,完成两个数字的相加操作,方法返回一个int型数据
public static int addOne(int x,int y){
int temp = 0 ; // 方法中的参数,是局部变量
temp = x + y ; // 执行加法计算
return temp ; // 返回计算结果
}
// 定义方法,完成两个数字的相加操作,方法的返回值是一个float型数据
public static float addTwo(float x,float y){
float temp = 0 ; // 方法中的参数,是局部变量
temp = x + y ; // 执行加法操作
return temp ; // 返回计算结果
}
};
从上面的代码可以看出同样是完成加法的操作,但是方法名称并不是很明确,例如 addOne()和addTwo()实际上就是两个同类型的方法,应该都统一成add()方法才对,为了解决这种问题Java导入了方法重载的概念。所谓的方法重载就是方法名相同,但参数的类型和参数的个数不同。通过传递参数的类型不同和参数个数的不同完成不同功能的方法调用。如下代码:
public class MethoDemo02{
public static void main(String args[]){
int one = add(10,20) ; // 调用整型的加法操作
float two = add(10.3f,13.3f) ; // 调用浮点数的加法操作
int three = add(10,20,30) ; // 调用有三个参数的加法操作
System.out.println("add(int x,int y)的计算结果:" + one) ;
System.out.println("add(float x,float y)的计算结果:" + two) ;
System.out.println("(int x,int y,int z)的计算结果:" + three) ;
}
// 定义方法,完成两个数字的相加操作,方法返回一个int型数据
public static int add(int x,int y){
int temp = 0 ; // 方法中的参数,是局部变量
temp = x + y ; // 执行加法计算
return temp ; // 返回计算结果
}
public static int add(int x,int y,int z){
int temp = 0 ; // 方法中的参数,是局部变量
temp = x + y + z ; // 执行加法计算
return temp ; // 返回计算结果
}
// 定义方法,完成两个数字的相加操作,方法的返回值是一个float型数据
public static float add(float x,float y){
float temp = 0 ; // 方法中的参数,是局部变量
temp = x + y ; // 执行加法操作
return temp ; // 返回计算结果
}
};
从程序中发现add()方法被重载了3次,而且每次重载是的参数类型或个数都有不同。
提示:
System.out.println();方法也属于方法重载。
System.out.println(3);//输出整数
System.out.println(33.3);//输出浮点数
System.out.println("33");//输出字符串
System.out.println(true);//输出布尔型
从发现程序可以打印数字,小数,字符,布尔等数据,也就是说println()方法被重载了。
重载的注意事项:
方法重载一定是在参数类型或者参数个数上的不同,下面的代码就不是方法重载:
范例:错误的方法重载
public static float add(int x, int y){//返回float类型,但是参数的类型及个数一致
float temp = 0;
temp = x + y;
return x+y;
}
public static int add(int x, int y){//返回int类型,但是参数的类型及个数一致
int temp = 0;
temp = x + y;
return x+y;
}
从上面的程序可以看出,方法的接受参数类型和个数完全一致,但是方法的返回类型值不一样,所以不是方法重载。
再次强调:方法重载只和方法接收参数的类型以及接收参数的个数有关 和方法的返回值类型无关。