【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);
	}
}
posted @ 2022-10-16 15:46  dayceng  阅读(47)  评论(0编辑  收藏  举报