Java 简明教程

Java - Method Overloading

Java Method Overloading

当一个 class 有两个或两个以上名称相同但参数不同的 methods 时,在调用时根据传递的参数,会调用各自的方法(或各自的方法主体将动态地与调用行绑定)。该机制被称为方法重载。

Advantage of Method Overloading

方法重载提高了代码的可读性,并减少了代码冗余。方法重载还有助于实现编译时 polymorphism

Example of Method Overloading

如果你观察以下的示例,我们在其中创建了一个名为 Tester 的类,此类有两个名称相同(add)和返回类型的方法,唯一的区别是它们接受的参数(一个方法接受两个整数变量,另一个接受三个整数变量)。

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

当你基于所传递的参数调用 add() 方法时,会执行各自的方法体。

int result = Calculator.add(1,2);  // returns 3;
result = Calculator.add(1,2,3);    // returns 6;

Different Ways of Java Method Overloading

可以通过以下方法实现方法重载,同时在类中具有同名方法。

  1. 使用不同的参数数量

  2. 使用不同类型的参数

Invalid Ways of Java Method Overloading

通过以下方法无法实现方法重载,同时在类中具有同名方法。 编译器会抱怨重复方法的存在。

  1. Using different return type

  2. 使用静态和非静态方法

Method Overloading: Different Number of Arguments

你可以基于不同的参数数量实现方法重载。

Example: Different Number of Arguments (Static Methods)

在该示例中,我们创建了一个 Calculator 类,它有两个具有相同名称但不同参数的静态方法,分别用于加法两个和三个 int 值。 在 main() 方法中,我们调用这些方法并打印结果。基于传递的参数类型,编译器决定要调用的方法,并相应地打印结果。

package com.tutorialspoint;

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

public class Tester {
   public static void main(String args[]){
      System.out.println(Calculator.add(20, 40));
      System.out.println(Calculator.add(40, 50, 60));
   }
}

Output

60
150

Example: Different Number of Arguments (Non Static Methods)

在该示例中,我们创建了一个 Calculator 类,它有两个具有相同名称但不同参数的非静态方法,分别用于加法两个和三个 int 值。 在 main() 方法中,我们使用 Calculator 类的对象调用这些方法并打印结果。基于传递的参数数量,编译器决定要调用的方法,并相应地打印结果。

package com.tutorialspoint;

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 class Tester {
   public static void main(String args[]){
      Calculator calculator = new Calculator();
      System.out.println(calculator.add(20, 40));
      System.out.println(calculator.add(40, 50, 60));
   }
}

Output

60
150

Method Overloading: Different Type of Arguments

你可以基于不同类型参数实现方法重载。

Example: Different Type of Arguments

在该示例中,我们创建了一个 Calculator 类,它有两个具有相同名称但不同类型参数的非静态方法,分别用于加法两个 int 值和两个 double 值。 在 main() 方法中,我们使用 Calculator 类的对象调用这些方法并打印结果。基于传递的参数类型,编译器决定要调用的方法,并相应地打印结果。

package com.tutorialspoint;

class Calculator{
   public int add(int a, int b){
      return a + b;
   }
   public double add(double a, double b){
      return a + b;
   }
}

public class Tester {
   public static void main(String args[]){
      Calculator calculator = new Calculator();
      System.out.println(calculator.add(20, 40));
      System.out.println(calculator.add(20.0, 40.0));
   }
}

Output

60
60.0