如以下代码,sumInt用来计算两个int类型数字的和,float,long,double分别用了sumFloat方法,sumLong方法,sumDoublet方法,如此便写了4个方法。
public class MethodTest{ public static void main(String[] args){ System.out.println(sumInt(10,20)); System.out.println(sumDouble(1.0,2.0)); System.out.println(sumLong(10L,20L)); System.out.println(sumFloat(1.0F,2.0F)); } public static int sumInt(int a,int b){ return a + b; } public static double sumDouble(double a,double b){ return a + b; } public static long sumLong(long a,long b){ return a + b; } public static float sumFloat(float a,float b){ return a + b; } }
方法重载(overload)
上面程序有缺点,定义的4个方法,功能上都是计算两个数字的和,只不过传入的参数类型不同,调用者在调用的时候,需要记忆每个方法的名字,并且需要自己根据传入参数的类型来判断调用相应的方法,这样使用起来不是很方便,那为了使用方便,我们来改造一下上面的代码。
public class MethodTest{ public static void main(String[] args){ System.out.println(sum(10,20)); System.out.println(sum(1.0,2.0)); System.out.println(sum(10L,20L)); System.out.println(sum(1.0F,2.0F)); } public static int sum(int a,int b){ return a + b; } public static double sum(double a,double b){ return a + b; } public static long sum(long a,long b){ return a + b; } public static float sum(float a,float b){ return a + b; } }
上面将之前的代码里面的4个方法名全部改成一样的了,这种情况叫做方法重载(overload)。
方法重载发生的条件:
发生在同一个类中.
方法名相同
参数列表不同(类型,个数,顺序)
注意:
方法重载和返回值类型无关
方法重载和方法的修饰符列表无关。
//参数的类型不同,构成重载 public static void m1(int a){} public static void m1(double a){} //参数的个数不同,构成重载 public static void m2(int a,int b){} public static void m2(int a){} //参数的顺序不同,构成重载,不过开发中不这样使用 public static void m3(int a,double b){} public static void m3(double a,int b){} //以下两个m4方法并没有构成重载. //两个方法完全一样,错误 //public static void m4(int a){} //public static void m4(int b){} /* 方法的重载和方法的返回值类型无关,不构成重载 public static void m5(){} public static int m5(){ return 100; } */ /* 方法的重载和方法的修饰符列表无关,不构成重载 static void m6(){} public static void m6(){} */