方法重载
基本介绍
java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一致!
比如:System.out.println(); out 是 PrintStream 类型
重载的好处
- 减轻了起名的麻烦
- 减轻了记名的麻烦
注意事项和使用细节
- 方法名:必须相同
- 参数列表:必须不同(参数类型或个数或顺序,至少有一样不同,参数名无要求)
- 返回类型:无要求
练习题
第一题:b c d e
第二题:编写程序,类 Methods 中定义三个重载方法并调用。方法名为 m。三个方法分别接收一个 int 参数、两个 int 参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。在主类的 main() 方法中分别用参数区别调用三个方法。
import java.util.Scanner;
public class OverLoadExercise{
public static void main(String[] args){
Methods method = new Methods();
int result1 = method.m(10);
System.out.println("平方运算:" + result1);
int result2 = method.m(9,10);
System.out.println("两数相乘并输出:" + result2);
String s = method.m("方法的重载");
System.out.println("打印字符串:" + s);
}
}
class Methods{
public int m(int num){
return num * num;
}
public int m(int num1, int num2){
return num1 * num2;
}
public String m(String s){
return s;
}
}
第三题:在 Methods 类,定义三个重载方法 max(),第一个方法,返回两个 int 值中的最大值,第二个方法,返回两个double 值中的最大值,第三个方法,返回三个 double 值中的最大值,并分别调用三个方法。
import java.util.Scanner;
public class OverLoadExercise{
public static void main(String[] args){
Methods method = new Methods();
int result1 = method.max(1,10);
System.out.println("两个int值的最大值:" + result1);
double result2 = method.max(9.0,10.0);
System.out.println("两个double值的最大值:" + result2);
double result3 = method.max(1.0,2.0,3.0);
System.out.println("三个double值的最大值:" + result3);
}
}
class Methods{
public int max(int num1, int num2){
return num1 > num2 ? num1 : num2;
}
public double max(double num1, double num2){
return num1 > num2 ? num1 : num2;
}
public double max(double num1, double num2, double num3){
double max1 = num1 > num2 ? num1 : num2;
return max1 > num3 ? max1 : num3;
}
}
可变参数
基本概念
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现。
基本语法
访问修饰符 返回类型 方法名(数据类型... 形参名){
}
例子:求和。
//1. int... 表示接受的是可变参数,类型是int,即可以接收多个int(0-多)
//2.使用可变参数时,可以当做数组来使用 即 nums 可以当做数组
//3.遍历nums求和
public class VarParameter{
public static void main(String[] args){
HspMethod m = new HspMethod();
System.out.println("和为:" + m.sum(1,9,80));
}
}
class HspMethod{
public int sum(int... nums){
int sum = 0;
for(int i = 0; i < nums.length; i++){
sum += nums[i];
}
//System.out.println("接收的参数个数= "+ nums.length);
return sum;
}
}
注意事项和使用细节
-
可变参数的实参可以为 0 个或任意多个。
-
可变参数的实参可以为数组。
例子:
public class VarParameter{ public static void main(String[] args){ HspMethod m = new HspMethod(); int[] arr = {1,2,3}; m.sum(arr); } } class HspMethod{ public void sum(int... nums){ System.out.println("接收的参数个数="+ nums.length); } }
-
可变参数的本质就是数组。
-
可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后。
public class VarParameter{ public static void main(String[] args){ HspMethod m = new HspMethod(); m.sum("Str",2,1.0,2.0); } } class HspMethod{ public void sum(String m, int n, double... nums){ System.out.println("接收的参数为:" + m + " " + n + " " + nums[0] + " " + nums[1]); } }
-
一个形参列表中只能出现一个可变参数。
练习题
有三个方法,分别实现返回姓名和两门课成绩(总分),返回姓名和三门课成绩(总分),返回姓名和五门课成绩(总分)。封装成一个可变参数的方法。
public class VarParameter{
public static void main(String[] args){
HspMethod m = new HspMethod();
m.showScore("王二",99.5,100);
m.showScore("张三",99,100,98.5);
m.showScore("李五",99,100,100,100,90.5);
}
}
class HspMethod{
public void showScore(String name, double... nums){
double sum = 0.0;
int i = 0;
for(; i < nums.length; i++){
sum += nums[i];
}
System.out.println("姓名:" + name );
System.out.println("一共有"+ i + "门成绩,课程总成绩为:" + sum);
}
}