Java系列:方法的重载和可变参数

105 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

方法重载

基本介绍

java中允许同一个类中,多个同名方法存在,但是要求 形参列表不一致

比如:System.out.println(); out是PrintStream类型

OverLoad01.java

重载(OverLoad)的好处:

  1. 减轻了起名的麻烦
  2. 减轻了记名的麻烦

快速入门案例

OverLoad01.java

public class OverLoad01 {
    public static void main(String[] args) {
//        System.out.println(100);
//        System.out.println('A');
//        System.out.println("adsf");
//        System.out.println(true);
//        System.out.println(1.1);
        MyCalculator myCalculator = new MyCalculator();
​
        System.out.println(myCalculator.calc(1.1,2));
​
    }
}
class MyCalculator{
    public int calc(int n1,int n2){
        return n1 + n2;
    }
    public double calc(int n1,double n2){
        return n1 + n2;
    }
    public double calc(double n2,int n1){
        return n1 + n2;
    }
    public int calc(int n1,int n2,int n3){
        return n1 + n3;
    }
}

案例:类:MyCalculator,方法:calc

calc(int n1,int n2);
calc(int n1,double n2);
calc(double n2,int n1);
calc(int n1,int n2,int n3);

注意事项和使用细节

  1. 方法名必须相同
  2. 参数列表必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
  3. 返回类型:无要求

练习:1.编写程序,类Methods中定义三个重载方法并调用。方法名为m。三个方法分别接收一个int参数,两个int参数,一个字符串参数。分别执行平方运算并输出结果,相乘并将结果输出,输出字符串信息,在主类的main方法中分别调用三个方法。OverLoadExercise.java

public class OverLoadExercise {
    public static void main(String[] args) {
        Method method = new Method();
        Methods methods = new Methods();
        System.out.println(method.m(2));
        System.out.println(method.m(2,3));
        method.m("alsdf ");
​
        System.out.println(methods.max(1,2));
        System.out.println(methods.max(2.1,2.1));
        System.out.println(methods.max(1.1,2.2,3.3));
​
​
    }
}
​
class Method{
    public int m(int n1){
        return n1 * n1;
    }
    public int m(int n1,int n2){
        return n1 * n2;
    }
    public void m(String s){
        System.out.println(s);
    }
}
​
class Methods{
    public int max(int n1,int n2){
        return n1 > n2 ? n1 : n2;
    }
    public double max(double n1,double n2){
        return n1 > n2 ? n1 : n2;
    }
    public double max(double n1,double n2,double n3) {
        double max1 = n1 > n2 ? n1 : n2;
        return max1 > n2 ? max1 : n2;
    }
}

2.在Methods类,定义三个重载方法max,第一个方法,返回两个int值中的最大值,第二个方法,返回两个double值中的最大值,第三个方法,返回三个double值中的最大值,并调用三个方法。

可变参数

基本概念

java允许将同一个类中的多个同名同功能但参数个数不同的方法,封装成一个方法就可以通过可变参数实现

基本语法

访问修饰符 返回类型 方法名(数据类型……形参名)

快速入门案例(VarParameter01.java)

看一个案例 类 GshMethod ,方法sum【可以计算两个数的和,三个数的和,四个数的和。。。】

public class VarParameter01 {
    public static void main(String[] args) {
        GshMethod hspMethod = new GshMethod();
        System.out.println(hspMethod.sum(20,21));
​
    }
}
​
class GshMethod {
    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;
    }
    //上面的方法名称相同,功能相同
    // 参数个数不同-》使用可变参数优化
    //int... 表示接收的是可变参数,类型是int,即可以接收多个(0-多)
    //使用可变参数时,可以当作数组使用,即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;
    }
​
​
​
​
}

可变参数细节

VarParameterDetail.java

public class VarParameterDetail {
    public static void main(String[] args) {
        //可变参数的实参可以为数组
        int[] arr = {1,2,3};
        T t1 = new T();
//        t1.f1(arr);
        //可变参数可以和普通类型的参数一起放在形参列表
        //但必须保证可变参数放在最后
        t1.f1(1,2,1,1,1,1,1,1);
    }
}
​
class T{
    public void f1(int i,double j,int... nums){
        System.out.println(nums[2]);
​
    }
​
}
  1. 可变参数的实参可以为0或多个
  2. 可变参数的实参可以为数组
  3. 可变参数的本质就是数组
  4. 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数放在最后
  5. 一个形参列表中只能出现一个可变参数

课堂练习

VarParameterExercise.java

public class VarParameterExercise {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.showScore("小白",60.1,60.1));
​
    }
}
​
class Student{
    public String showScore(String s,double... nums){
​
        double score = 0;
​
        for (int i = 0; i < nums.length; i++){
            score += nums[i];
        }
        return s + " 有 " + nums.length + "门课,,总分为:" + score;
    }
}

有三个方法,分别实现返回姓名和两门课总分,返回姓名和三门课总分,返回姓名和五门课总分,封装成一个可变参数的方法

类名Student方法名showScore