在同一类中具有多个具有相同名称的方法称为方法重载。类中具有相同名称的方法可以是声明的方法,继承的方法或两者的组合。
重载方法必须具有不同数量的参数,不同类型的参数或两者。方法的返回类型,访问级别和throws
子句对使其成为重载方法没有任何影响。参考以下示例代码,其中有几个名称为 m1
方法。
import java.io.IOException; class MyClass { public void m1(int a) { // Code goes here } public void m1(int a, int b) { // Code goes here } public int m1(String a) { // Code goes here return 0; } public int m1(String a, int b) throws IOException { // Code goes here return 0; } }
下面的代码显示了如何使用重载。参考以下代码 -
public class Main { public double add(int a, int b) { System.out.println("Inside add(int a, int b)"); double s = a + b; return s;//from ww w. ja v a 2 s . c om } public double add(double a, double b) { System.out.println("Inside add(double a, double b)"); double s = a + b; return s; } public static void main(String[] args) { Main ot = new Main(); int i = 1; int j = 1; double d1 = 10.42; float f1 = 22.3F; float f2 = 24.5F; short s1 = 22; short s2 = 26; ot.add(i, j); ot.add(d1, j); ot.add(i, s1); ot.add(s1, s2); ot.add(f1, f2); ot.add(f1, s2); } }
上面的代码生成以下结果。
Inside add(int a, int b) Inside add(double a, double b) Inside add(int a, int b) Inside add(int a, int b) Inside add(double a, double b) Inside add(double a, double b)
有时,重载方法和自动类型扩展可能会混淆编译器,导致编译器错误。
class Adder { public double add(int a, double b) { return a + b; } public double add(double a, int b) { return a + b; } } public class Main { public static void main(String[] args) { Adder a = new Adder(); // double d = a.add(2, 3); // A compile-time error double d1 = a.add((double) 2, 3); // OK. Will use add(double, int) double d2 = a.add(2, (double) 3); // OK. Will use add(int, double) } }