当一个类具有两个或多个具有相同名称但参数不同的方法时,在基于传递的参数进行调用时,将调用相应的方法(或相应的方法主体将与调用行动态绑定)。这种机制称为方法重载。
class Test{ public int division(int a, int b){ int result = a/b; return result; } public double division (float a, float b){ double result = a/b; return result; } } public class OverloadingExample{ public static void main(String args[]){ Test obj = new Test(); System.out.println("division of integers: "+obj.division(100, 40)); System.out.println("division of floating point numbers: "+obj.division(214.225f, 50.60f)); } }
输出结果
division of integers: 2 division of floating point numbers: 4.233695983886719
超载时,您需要牢记以下几点:
两种方法应在同一类中。
方法的名称应相同,但它们应具有不同的数量或参数类型。
如果名称不同,则它们将成为不同的方法,并且如果它们具有相同的名称和参数,则将引发编译时错误,提示“方法已定义”。
class Test{ public int division(int a, int b){ int result = a/b; return result; } public double division (int a, int b){ double result = a/b; return result; } }
OverloadingExample.java:6: error: method division(int, int) is already defined in class Test public static double division (int a, int b){ ^ 1 error
在覆盖中,如果两种方法都遵循以上两个规则,则它们可以-
有不同的返回类型。
class Test{ public int division(int a, int b){ int result = a/b; return result; } public void division (float a, float b){ double result = a/b; System.out.println("division of floating point numbers: "+result); } }
具有不同的访问修饰符-
class Test{ public int division(int a, int b){ int result = a/b; return result; } private void division (float a, float b){ double result = a/b; System.out.println("division of floating point numbers: "+result); } }
可以抛出不同的异常-
class Test{ public int division(int a, int b)throws FileNotFoundException{ int result = a/b; return result; } private void division (float a, float b)throws Exception{ double result = a/b; System.out.println("division of floating point numbers: "+result); } }