方法重载

方法的重载

方法重载(Method Overloading)指的是在一个类中可以有多个同名方法,只要它们的参数列表不同。参数列表不同意味着参数的数量、类型或顺序至少有一项不同。方法重载是编译时多态性的体现。

  1. 参数个数不同:可以定义几个方法名称相同但参数数量不同的方法。
  2. 参数类型不同:可以定义几个方法名称相同但参数类型不同的方法。
  3. 参数顺序不同:参数列表中的参数顺序不同也构成重载。
  4. 返回类型无关:方法的返回类型不作为重载的区分因素。即使两个方法的返回类型不同,如果它们的参数列表相同,则不构成重载。
  5. 访问修饰符无关:方法的访问修饰符(如publicprivate等)不影响方法重载。
  6. 异常声明无关:方法声明时抛出的异常不同,也不会影响方法的重载。
  7. 重载与覆盖(Override)的区别:重载是多同一个类中多个方法的区分,而覆盖是在子类中对父类方法的重新实现。
  8. 构造函数重载:构造函数也可以被重载,即一个类可以有多个构造函数,它们的参数列表不同。
  9. 静态方法和实例方法不能互相重载:静态方法和实例方法可以有相同的名称和参数列表,但它们属于不同的方法类型。
  10. 重载选择:当调用重载方法时,编译器会根据方法调用中的参数类型和数量来确定应该调用哪个方法。

下面是一个Java方法重载的示例:

public class Calculator {

    // 方法重载示例:参数个数不同
    public int add(int a, int b) {
        return a + b;
    }

    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 方法重载示例:参数类型不同
    public double add(double a, double b) {
        return a + b;
    }

    // 方法重载示例:参数顺序不同
    public int multiply(int a, int b) {
        return a * b;
    }

    public int multiply(int b, int a) {
        return a * b; // 参数顺序改变,但仍然是重载
    }

    // 构造函数重载
    public Calculator() {
        System.out.println("No-arg constructor");
    }

    public Calculator(int initial) {
        System.out.println("Constructor with initial value: " + initial);
    }
}

// 使用示例
public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        int sum1 = calc.add(5, 10); // 调用第一个add方法
        int sum2 = calc.add(5, 10, 15); // 调用第二个add方法
        double sum3 = calc.add(5.5, 10.5); // 调用第三个add方法

        Calculator calc2 = new Calculator(); // 调用无参构造函数
        Calculator calc3 = new Calculator(100); // 调用有参构造函数
    }
}
posted @ 2024-08-05 14:44  糊涂图-4060  阅读(61)  评论(0)    收藏  举报