方法重載:在同一個類中,允許存在多個同名方法,只要它們的參數列表不同,與修飾符和返回值類型無關,這樣的多個同名方法之間構成重載。
參數列表:參數個數,參數類型,參數順序
方法調用:根據實際傳入的參數決定調用哪個方法。
代碼示例:
public class OverloadTest {
public static void main(String[] args) {
//根據實際傳入的參數決定調用哪個方法
sum();
System.out.println(sum(15));;
System.out.println(sum(10.5d, 15.3d));;
}
public static void sum() {
System.out.println(10 + 10);
}
private static int sum(int a) {
return a + 10;
}
static double sum(double a, double b) {
return a + b;
}
}
方法重寫:當父類中的方法對於子類來說不適用時,子類可以對從父類中繼承來的方法進行重寫/覆寫。
方法調用:根據對象所屬的類決定調用哪個類的方法。
代碼示例:
class Father {
void show() {
System.out.println("Father show");
}
}
class Son extends Father {
@Override
public void show() {
System.out.println("Son show");
}
}
public class OverrideTest {
public static void main(String[] args) {
Father f1 = new Father();
f1.show();
//多態引用,實際創建還是子類對象,調用的也是子類重寫的show方法
Father f2 = new Son();
f2.show();
}
}
區別總結:
重載 | 重寫 | |
---|---|---|
定義位置 | 同一個類中 | 父類(接口)、子類(實現類) |
方法名 | 必須相同 | 必須相同 |
形參列表 | 必須不同 | 必須相同 |
返回值類型 | 無關 | 如果是基本數據類型和void,必須一致;如果是引用數據類型,重寫方法的返回值類型必須和被重寫方法的返回值類型相同或是它的子類 |
權限修飾符 | 無關 | 重寫方法的訪問權限必須 大於或等於 被重寫方法的訪問權限 |
方法調用 | 根據傳遞的實際參數 | 根據對象的類型 |
拋出的異常 | 無關 | 重寫方法拋出的異常類型要么和被重寫方法相同,要么是被重寫方法拋出的異常的子類,要么不拋出異常 |