JAVA总结之方法重载
问题描述:
方法重载(overload)是一种Java语法现象,指在一个类内部出现了多个方法名相同,但是参数列表(参数的类型,个数,顺序)不同的方法。Java的方法重载调用会更具参数类型有自动识别调用那个方法。方法重载,可以增强代码的可维护性,为使用者带来更方便。
方法重载必须遵守两个规则:
1.参数列表必须不同。
2.返回值类型不受限制,可以不同。
下面附上测试代码样例:
1 package com.test; 2 3 public class TestOverload { 4 5 /** 6 * @param args 7 * 方法重载测试样例 8 */ 9 public static void main(String[] args) { 10 // TODO Auto-generated method stub 11 double llp1 = llp(1,2); 12 /* 13 * 由于int会向下转型成double,所以不会报错。 14 * 调用:double com.test.TestOverload.llp(double i, double j) 15 */ 16 double llp2 = llp(1.0,2); 17 double llp3 = llp(1.0,2.0); 18 double atp1 = atp(1,2.0); 19 double atp2 = atp(1.0,2); 20 /* 21 * double atp3 = atp(1.0,2.0); 22 * 由于没有atp(double,double)的方法,所以这里会报错 23 * The method atp(double, int) in the type TestOverload is not applicable for the arguments (double, double) 24 */ 25 /* 26 * double atp3 = atp(1,2); 27 * int会自动向上转型成double,但是由于重载方法有atp(int,double)和atp(double,int), 28 * 导致这方法不知道怎么转,模棱两可的,所以报错 29 * The method atp(int, double) is ambiguous for the type TestOverload 30 */ 31 } 32 33 public static double llp(int i, int j){ 34 System.out.println("调用:llp(int i, int j)"); 35 return 1.0; 36 } 37 public static double llp(double i, double j){ 38 39 System.out.println("调用:llp(double i, double j)"); 40 return 1.0; 41 } 42 /* 43 * 这里只有放回类型不同,不满足重载条件,报错 44 * Duplicate method llp(int, int) in type TestOverload 45 * public static double llp(int i, int j){} 46 */ 47 public static double atp(int a, double b){ 48 System.out.println("调用:atp(int a, double b)"); 49 return 1.0; 50 } 51 public static double atp(double a, int b){ 52 System.out.println("调用:atp(double a, int b)"); 53 return 1.0; 54 } 55 }
控制台输出数据:
调用:llp(int i, int j) 调用:llp(double i, double j) 调用:llp(double i, double j) 调用:atp(int a, double b) 调用:atp(double a, int b)