方法的重载(重点) 在讲解重载操作之前,首先完成这样的一种定义,要求定义方法,此方法可以完成两个整数的相加,或者是两个小数的相加,或者是三个整数的相加,那么如果按照习惯性的思路,现在一定要定义三个方法,可能方法就编写如下了: public class Hello { public static void main(String args[]) { System.out.println("两个整型相加:" + add1(10,20)) ; System.out.println("三个整型相加:" + add2(10,20,30)) ; System.out.println("两个浮点型相加:" + add3(10.2,20.3)) ; } public static int add1(int x,int y) { return x + y ; } public static int add2(int x,int y,int z) { return x + y + z ; } public static double add3(double x,double y) { return x + y ; } } |
现在已经成功的完成了代码的调用,但是如果按照这种思路,现在有1000种这样的增加方法,这个时候调用起来就很麻烦,还要首先区分出方法的编号是多少,这种不合适的操作一定不是我们所使用的。 在这种情况下可以使用方法的重载(Overloading)来解决问题,方法重载指的是方法名称相同,参数的类型或个数不同,调用的时候将会按照传递的参数类型和个数完成不同的方法体的执行。 public class Hello { public static void main(String args[]) { System.out.println("两个整型相加:" + add(10,20)) ; System.out.println("三个整型相加:" + add(10,20,30)) ; System.out.println("两个浮点型相加:" + add(10.2,20.3)) ; } public static int add(int x,int y) { return x + y ; } public static int add(int x,int y,int z) { return x + y + z ; } public static double add(double x,double y) { return x + y ; } } |
它是自动的根据参数的类型和个数的不同调用不同的方法体进行执行。 但是讨论一下,以下的代码属于方法重载吗? public class Hello { public static void main(String args[]) { System.out.println("两个整型相加:" + add(10,20)) ; System.out.println("两个浮点型相加:" + add(10,20)) ; } public static int add(int x,int y) { return x + y ; } public static double add(int x,int y) { // 返回值不同 return x + y ; } } |
可以发现,这个时候除了方法的返回值类型不一样之外,方法的参数类型及个数完全相同,所以这种操作不符合于方法重载的定义。 额外提醒: 方法重载的时候并没有规定出返回值类型必须统一,即:重载的方法返回值类型可以不一样,但是从开发的角度而言,建议所有方法重载之后返回值类型统一,但是这种规则不是死的,至少在我们自己编写的代码之中,80%的情况下可以满足。 |