Java面向对象(二)
五、方法
5.1 方法的重载(overload)
-
定义:在同一个类中,允许定义多个相同名字的方法,只要参数列表(参数类型或者参数个数)是不同的。
-
判断是否为方法重载:
(1)同一个类,同样的方法名,不同的参数列表!(2)与方法修饰符、方法返回值、形参名、方法体无关!
public class OverloadTest{ public void getSum(int a,int b){ } public void getSum(int a,int b,int c){ } public void getSum(double a,double b){ } public void getSum(int a,double b){ } public void getSum(double a,int b){ } /* 不属于方法重载:与方法返回值类型无关 public int getSum(int a,int b){ return 0; } */ /* 不属于方法重载:与形参名称无关 public void getSum(int m,int n){} */ /* 不属于方法重载:与方法修饰符无关 private void getSum(int a,int b){} */ }
-
方法重载中一些特殊情况:
情况一:
public class OverloadTest {
public static void main(String[] args){
OverloadTest o = new OverloadTest();
System.out.println(o.getSum(1,2)); // 输出3
System.out.println(o.getSum(1.0,2.0)); // 输出3.0
System.out.println(o.getSum(1.0,2)); // 输出3.0
}
public int getSum(int a,int b){
return a + b;
}
public double getSum(double a,double b){
return a + b;
}
}
/* 可以看到,我们并没有定义 getSum(double,int)类型的方法,但是 getSum(1.0,2)还是正常输出,没有报错。
这里getSum(1.0,2)是调用了getSum(double a,double b)的方法,原因是实参2被自动转换为double类型并传递给这个方法。
那为什么getSum(1,2)调用时不会使用getSum(double a,double b)方法?
原因:
其实 getSum(int a,int b) 和 getSum(double a,double b) 都是 getSum(1.0,2) 可能的匹配。调用方法时,Java编译器会查找最精确匹配的方法,因为方法 getSum(int a,int b) 比 getSum(double a,double b) 更精确,所以调用 getSum(1,2) 时使用的是getSum(int a,int b)。
*/
情况二:
public class Over