Java 简明教程
Java - Method Overloading
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;
Invalid Ways of Java Method Overloading
通过以下方法无法实现方法重载,同时在类中具有同名方法。 编译器会抱怨重复方法的存在。
-
Using different return type
-
使用静态和非静态方法
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));
}
}
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));
}
}
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));
}
}