Java 方法重载

当类有两个或多个同名但不同参数的方法,在调用时根据传递的参数调用相应的方法(或相应的方法体将动态地与调用线绑定)。这种机制称为方法重载。

方法重载的优点

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

方法重载示例

如果你观察下面的例子,这里我们创建了一个名为 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);  //返回3;
result = Calculator.add(1,2,3);    //返回6; 

Java 方法重载的不同方式

在类中具有相同名称的方法时,可以使用以下方式实现方法重载。

  • 使用不同数量的参数
  • 使用不同的类型参数

Java 方法重载的无效方式

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

  • 使用不同的返回类型
  • 使用静态和非静态方法

方法重载:不同参数数量

可以根据不同参数数量实现方法重载。

示例:不同参数数量(静态方法)

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

package com.yxjc123;

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));
   }
} 

输出

60
150 

示例:不同数量的参数(非静态方法)

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

package com.yxjc123;

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));
   }
} 

输出

60
150 

方法重载:不同类型的参数

您可以根据不同类型的参数实现方法重载。

示例:不同类型的参数

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

package com.yxjc123;

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));
   }
} 

输出

60
60.0