【Java复健指南04】重载与可变参数
重载
java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!
比如:
System.out.println();out是PrintStream类型
重载的好处
1)减轻了起名的麻烦
2)减轻了记名的麻烦
要求:
1)方法名:必须相同
2)形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
3)返回类型:无要求
例子
public class OverloadExercise01{
public static void main(String[] agrs){
/*
编写程序,类Methods中定义三个重载方法并调用。
方法名为m。三个方法分别接收一个int参数、两个int参数、一个字符串参数。
分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。
在主类的main ()方法中分别用参数区别调用三个方法。
定义三个重载方法max(),
第一个方法,返回两个int值中的最大值,
第二个方法,返回两个double值中的最大值,
第三个方法,返回三个double值中的最大值,并分别调用三个方法
*/
}
}
class Methods{
//方法名 max
//形参 (int, int)
//int
public int max(int n1, int n2){
return n1 > n2 ? n1 : n2;
}
//方法名 max
//形参 (double, double)
//double
public double max(double n1, double n2){
return n1 > n2 ? n1 : n2;
}
//方法名 max
//形参 (double, double, double)
//double
public double max(double n1, double n2, double n3){
double max1 = n1 > n2 ? n1 : n2;
return max1 > n3 ? max1 : n3;
}
//方法名 m
//形参 (int)
//void
public void m(int n){
System.out.println("平方="+(n*n));
//方法名 m
//形参 (int,int)
//void
public void m(int n1, int n2){
System.out.println("相乘="+(n1 * n2));
}
}
可变参数
"[数据类型]..."的方式表示使用可变参数
例如,int...表示接受的是可变参数,类型是int,即可以接收多个int(一个或多个)
注意,接受到的多个形参是以数组方式存放的,可以进行遍历,因此也成为形参列表
public class VarParameter01{
public static void main(String[] agrs){
HspMethod h1 = new HspMethod();
System.out.println(h1.sum(1,2));
}
}
class HspMethod {
//可以计算2个数的和,3个数的和,4.5,
//可以使用方法重载
public int sum(int n1, int n2){//2个数的和
return n1 +n2;
}
public int sum(int n1, int n2, int n3) {//3个数的和
return n1 + n2 + n3;
}
public int sum(int n1, int n2,int n3,int n4){//4个数的和
return n1 +n2 +n3 + n4;
}
//...
//上面的三个方法名称相同,功能相同,参数个数不同->使用可变参数优化
//
//1. int...表示接受的是可变参数,类型是int,即可以接收多个int(0-多)
//2.使用可变参数时,可以当做数组来使用nums
//3. 遍历nums求和即可
public int sum(int... nums){
// System.out.println("接受的参数个数=" + nums.length);
int res = 0;
// 多个参数(可变参数)输入可当成列表使用
for(int i = 0; i < nums.length; i++) {
res += nums[i];
}
return 0;
}
}
注意事项
1)可变参数的实参可以为0个或任意多个。
2)可变参数的实参可以为数组。
3)可变参数的本质就是数组.
4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
5)一个形参列表中只能出现一个可变参数
例子
public class VarParameterExercise{
public static void main(String[] agrs){
/*
有三个方法,分别实现返回姓名和两门课成绩(总分),
返回姓名和三门课成绩(总分),返回姓名和五门课成绩(总分)。
封装成一个可变参数的方法
类名HspMethod方法名showScore
*/
HspMethod h1 = new HspMethod();
h1.showScore("ag", 77.5, 100, 88);
}
}
class HspMethod{
public void showScore(String name, double... sc){
double sums = 0;
for(int i = 0; i < sc.length; i++){
sums += sc[i];
}
System.out.println("姓名:"+name+" 总分:"+sums);
}
}