重寫是封裝的特性之一。
1.概述
方法的重寫(override)是封裝的特性之一。
在子類中可以根據需要對基類中繼承來的方法進行重寫。
重載和重寫沒有任何關系。
作用:通過重寫,子類既可以繼承父類的東西,又可以靈活的擴充。
1.1特點
- 在子類中可以根據需要對基類中繼承來的方法進行重寫。
- 重寫方法必須和被重寫方法具有相同方法名稱、參數清單和傳回值類型。
- 重寫方法不能使用比被重寫方法更嚴格的通路權限。(由于多态)
1.2執行個體說明
在上一節:繼承詳解及用法中,提到如果子類繼承的父類方法不完全是我們所希望的方法,可以通過重寫進行實作。
下面我們通過代碼進行說明:
public class Animal {
String name;
void eat() {
System.out.println("have a good dinner");
}
}
class Birds extends Animal {
void fly() {
System.out.println("Yeah,I can fly~~");
}
}
假如,鳥類在eat的時候,需要輸出jiujiujiu。可通過如下代碼實作:
class Birds extends Animal {
@Override
void eat() {
System.out.println("jiujiujiu");
}
void fly() {
System.out.println("Yeah,I can fly~~");
}
}
這樣我們就可以實作擴充我們的父類方法。
關于@Override是注解,用于限定的方法必須override父類的方法,否則編譯不通過。這裡先不讨論。
則我們在通過Bird執行個體調用eat方法時,是調用的重寫後的方法。
哪之前的父類的方法呢?其實還存在,我們可以在子類通過super進行調用。如下:
class Birds extends Animal {
@Override
void eat() {
super.eat(); // 調用父類的方法
System.out.println("----------------------------------------"); // 分隔線
System.out.println("jiujiujiu");
}
void fly() {
System.out.println("Yeah,I can fly~~");
}
}
下面我們建立一個測試類,進行測試輸出結果:
class Test {
public static void main(String[] args) {
Birds b = new Birds();
b.eat();
}
}
結果如下:
have a good dinner
----------------------------------------
jiujiujiu