在Java語言中,當一個子類繼承自一個父類時,可以對父類中的方法進行重寫來實現自己的功能需求。方法重寫是Java面向對象程序設計中的一個非常重要的特性,本文將結合實例,從多個方面詳解方法重寫的相關知識。
一、方法重寫的定義
方法重寫是指子類定義的方法與父類中同名、同參數表、同返回值類型的方法相同,即子類將父類的方法重寫/覆蓋,使得子類調用該方法時會覆蓋父類中原有的方法。方法重寫的語法規則如下:
class 父類名{
返回類型 方法名(參數列表){...}
}
class 子類名 extends 父類名{
返回類型 方法名(參數列表){...}
}
在方法重寫中需要特別注意的是:
- 訪問許可權不能更低,可以更高;
- 返回類型必須相同;
- 方法名稱、參數列表必須完全一致;
- 只能重寫父類中的非私有方法;
二、方法重寫的優點
方法重寫在面向對象程序設計中具有以下幾個優點:
- 實現了多態性的特性;
- 方便進行系統的擴展和修改;
- 提高了代碼的復用性;
- 降低了系統的耦合性。
三、方法重載與方法重寫的區別
在Java語言中,方法重載與方法重寫是兩個不同的概念。
方法重載(Overload)指的是在同一類中定義多個同名方法,但該方法的參數類型、個數、順序不同,通過參數列表的不同來實現重載。方法重載的語法規則:
class ClassName{
int add(int num1, int num2){...}
int add(int num1, int num2, int num3){...}
}
方法重寫與方法重載的不同點主要體現在:
- 方法重載參數列表不同,方法重寫參數列表相同;
- 方法重載返回值類型可以不同,方法重寫返回值類型必須相同或兼容;
- 方法重載是在同一個類中,方法重寫發生在子類中;
四、方法重寫的實例解析
下面通過實例對方法重寫進行深入了解:
(一)Animal類的定義
public class Animal {
public void eat(){
System.out.println("Animal eat something");
}
}
Animal類包含一個公有的eat()方法,用於輸出「Animal eat something」。
(二)Dog類的定義
public class Dog extends Animal {
public void eat(){
System.out.println("Dog eat meat");
}
}
Dog類繼承於Animal類,同時重寫了eat()方法,用於輸出「Dog eat meat」。注意,本常式中的Dog類與Animal類存在繼承關係。
(三)測試程序
public class Test{
public static void main(String[] args){
Animal animal = new Animal();
Dog dog = new Dog();
animal.eat(); //Animal eat something
dog.eat(); //Dog eat meat
}
}
測試程序中,分別實例化Animal類和Dog類,並分別調用它們的eat()方法。結果輸出了「Animal eat something」和「Dog eat meat」。注意,調用的是子類Dog中重寫的方法,即方法重寫將父類的方法覆蓋掉了。
五、方法重寫的注意事項
需要注意的是,方法重寫在實際應用中還有以下幾個問題需要考慮:
- 方法重寫的返回類型必須是父類返回類型的子類或兼容類型,否則會出現編譯錯誤;
- 被覆蓋的方法不能使用比父類定義的更嚴格的訪問修飾符,否則同樣會導致編譯錯誤;
- 被覆蓋的方法不能拋出比父類定義的更多的異常,否則同樣會導致編譯錯誤;
- static方法不能被重寫為非static方法,也不能從非static方法重寫為static方法;
- 方法的參數順序和類型必須完全相同;
- 子類方法的訪問控制許可權不能低於父類方法的訪問控制許可權。
六、總結
本文從定義、優點、與方法重載的區別、實例解析和注意事項等多個方面對Java語言中的方法重寫進行了詳細的闡述。掌握方法重寫是Java面向對象程序設計中的一個重要知識點,當我們在進行系統設計時,應充分利用方法重寫提高代碼復用性,方便進行系統的擴展和修改。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/289380.html