【重載和重寫有什么區別】在面向對象編程中,重載(Overloading) 和 重寫(Overriding) 是兩個常見的概念,它們都與方法有關,但用途和實現方式完全不同。理解這兩者的區別對于編寫清晰、高效的代碼非常重要。
一、
重載 是指在同一個類中,可以有多個方法具有相同的名字,但參數列表不同(參數類型、數量或順序不同)。重載是編譯時多態的一種體現,主要用于提高代碼的可讀性和靈活性。
重寫 是指子類重新定義父類中的方法,方法名、參數列表必須完全一致,返回值類型也要兼容。重寫是運行時多態的一種體現,用于實現多態性,使子類能夠根據自身特性對方法進行修改。
二、對比表格
| 對比項 | 重載(Overloading) | 重寫(Overriding) |
| 定義位置 | 同一個類中 | 不同類中(子類覆蓋父類的方法) |
| 方法名 | 必須相同 | 必須相同 |
| 參數列表 | 必須不同(類型、數量、順序) | 必須相同 |
| 返回值類型 | 可以不同(但要兼容) | 必須相同或協變(Java 5+ 支持) |
| 訪問權限 | 可以不同(但不能更嚴格) | 不能比父類更嚴格 |
| 異常處理 | 可以不同(但不能拋出更寬泛的異常) | 不能拋出比父類更寬泛的異常 |
| 調用時機 | 編譯時確定(靜態綁定) | 運行時確定(動態綁定) |
| 多態類型 | 編譯時多態(靜態多態) | 運行時多態(動態多態) |
| 使用場景 | 提高方法的靈活性和可讀性 | 實現子類對父類方法的個性化實現 |
三、示例說明
重載示例(Java):
```java
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
public static double add(double a, double b) {
return a + b;
}
}
```
重寫示例(Java):
```java
class Animal {
public void speak() {
System.out.println("Animal speaks");
}
}
class Dog extends Animal {
@Override
public void speak() {
System.out.println("Dog barks");
}
}
```
四、總結
- 重載:同一類中,方法名相同,參數不同,用于擴展功能。
- 重寫:子類中,方法名、參數、返回值相同,用于實現多態。
正確使用重載和重寫,有助于提升代碼的可維護性和擴展性。


