重载
1、介绍重载
java 中允许同一个类中,多个同名方法的存在,但要求 形参列表不一致
比如:System.out.println(); out 是 PrintStream 类型
注意事项
(1)方法名:必须相同
(2)形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
(3)返回类型:无要求
2、重载的好处
- 减轻了起名的麻烦
- 减轻了记名的麻烦
3、案例
案例一
案例:类:MyCalculator 方法:calculate
1 calculate(int n1, int n2) //两个整数的和
2 calculate(int n1, double n2) //一个整数,一个 double 的和
3 calculate(double n2, int n1)//一个 double ,一个 Int 和
4 calculate(int n1, int n2,int n3)//三个 int 的和
class MyCalculator {
public int calculate(int n1, int n2) {
return n1 + n2;
}
public double calculate(int n1, double n2) {
return n1 + n2;
}
public double calculate(double n1, int n2) {
return n1 + n2;
}
public int calculate(int n1, int n2,int n3) {
return n1 + n2 + n3;
}
}
案例二
System.out.println(method.max(10.0, 1.4, 30)); 会调用哪一个?
会调用下面哪个max,因为不需要类型转换,自动匹配到int了
public double max(double n1, double n2, double n3) {
System.out.println("max(double n1, double n2, double n3)");
//求出 n1 和 n2 的最大值
double max1 = n1 > n2 ? n1 : n2;
return max1 > n3 ? max1 : n3;
}
public double max(double n1, double n2, int n3) {
System.out.println("max(double n1, double n2, int n3)");
//求出 n1 和 n2 的最大值
double max1 = n1 > n2 ? n1 : n2;
return max1 > n3 ? max1 : n3;
}
可变参数
1、介绍
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。
就可以通过可变参数实现
- 与重载的不同:可变参数实现封装方法,要求参数个数不同
2、基本语法
访问修饰符 返回类型 方法名(数据类型… 形参名) {
}
3、案例
计算 2个数的和、3个数的和、4、5、6…
可以使用方法重载,如下代码,但太过重复
class Method1 {
//可以计算 2个数的和、3个数的和、4、5、6......
//可以使用方法重载
public int sum(int n1, int n2) {
return n1 + n2;
}
public int sum(int n1, int n2, int n3) {
return n1 + n2 + n3;
}
public int sum(int n1, int n2, int n3, int n4) {
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 res;
}
4、注意事项
(1)可变参数的实参可以为0个或任意多个。
(2)可变参数的实参可以为数组。
(3)可变参数的本质就是数组.
(4)可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
(5)一个形参列表中只能出现一个可变参数
进一步说明(2)
public class VarParameter01 {
public static void main(String[] args){
int arr[] = {1, 2, 3};
T t1 = new T();
t1.f1(arr);
}
}
class T {
public void f1(int... nums) {
System.out.println("长度=" + nums.length);
}
}
进一步说明(4)
public void f2(String str, double... nums) {
}
public void f3(double n1, double... nums) {
}
例题
有三个方法,分别实现返回姓名和两门课成绩(总分),
返回姓名和三门课成绩(总分),返回姓名和五门课成绩(总分)。
封装成一个可变参数的方法
学习这个return怎么写的
public String showScore(String name ,double... scores ) {
double totalScore = 0;
for(int i = 0; i < scores.length; i++) {
totalScore += scores[i];
}
return name + " 有 " +scores.length + "门课的成绩总分为=" + totalScore;
}
本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03