当一个类中有两个或多个同名但参数不同的方法时,在调用时,将基于传递的参数选择相应的方法(或动态地将相应的方法体绑定到调用行)。这种机制被称为方法重载。
方法重载的优点
方法重载提高了代码的可读性并减少了代码冗余。此外,方法重载也有助于实现编译时多态性。
方法重载示例
观察以下示例,这里创建了一个名为 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);
result = Calculator.add(1,2,3);
Java 方法重载的不同方式
可以通过以下几种方式在类中拥有同名方法来实现方法重载:
无效的方法重载方式
以下方式无法实现方法重载,编译器会报错说存在重复的方法:
基于不同数量参数的方法重载示例
你可以基于不同数量的参数来实现方法重载。
示例:基于不同数量参数的方法重载(静态方法)
在这个例子中,我们创建了一个名为 Calculator
的类,其中包含两个同名但参数不同的静态方法,分别用来加两个和三个整数值。在 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));
}
}
输出:
60
150
示例:基于不同数量参数的方法重载(非静态方法)
在这个例子中,我们创建了一个名为 Calculator
的类,其中包含两个同名但参数不同的非静态方法,分别用来加两个和三个整数值。在 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));
}
}
输出:
60
150
基于不同类型参数的方法重载示例
你可以基于不同类型的参数来实现方法重载。
示例:基于不同类型参数的方法重载
在这个例子中,我们创建了一个名为 Calculator
的类,其中包含两个同名但参数类型不同的非静态方法,分别用来加两个整数值和两个双精度浮点值。在 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));
}
}
输出:
60
60.0