在Java語言中,覆寫(Override)和超載(Overload)是兩種不同的概念,它們是物件導向程式設計中多態性的體現。
覆寫(Override):
覆寫發生在兩個有繼承關係的類之間,子類重寫繼承自父類的方法。
覆寫方法必須和父類的方法有相同的方法名、參數列表和返回類型。
覆寫可以讓子類改變或擴展從父類繼承來的行為。
在覆寫的方法前通常會加上@Override注解,確保覆寫的正確性。
存取權限可以放寬,但不能縮窄。例如,如果父類方法為protected,子類覆寫的方法可以是protected或public,但不能是private。
舉例:
class Animal {
public void eat() {
System.out.println("Animal eats");
}
}
class Dog extends Animal {
@Override
public void eat() {
System.out.println("Dog eats");
}
}
在這個例子中,Dog類覆寫了Animal類中的eat方法。
超載(Overload):
超載發生在一個類的範圍內,一個類中有多個同名的方法,但它們的參數列表不同。
超載方法必須改變參數數量或參數類型。
超載主要用來增強程式的可讀性,提供多種方式來執行相同的任務。
返回類型和訪問修飾符可以不同,它們不影響超載。
舉例:
java
Copy code
class Animal {
public void eat() {
System.out.println("Animal eats");
}
public void eat(String food) {
System.out.println("Animal eats " + food);
}
}
在這個例子中,Animal類超載了eat方法,提供了兩種使用方法:一種不需要參數,另一種需要一個字串參數。
總結:
覆寫是子類和父類之間的行為,涉及繼承。
超載是在同一個類中的方法之間的關係,它只是提供了同一個方法名的不同版本。