2.2方法的重寫(覆蓋)(override,orverwrite)
2.2.1 什么時候方法要進行重寫?
如果父類中的方法已經無法滿足當前子類的業務需求,需要將父類中的方法進行重新寫一遍。就是要改變父類的行為。
注意:子類如果重寫父類中的方法之后,子類對象一定調用的是重寫之后的方法。
2.2.2 發生方法覆蓋的條件
①發生在具有繼承關系的兩個類之間
②必須具有相同的方法名,相同的返回值類型,相同的參數列表.
③重寫的方法不能比被重寫的方法擁有更低的訪問權限。
④重寫的方法不能比被重寫的方法拋出更寬泛的異常。(異常機制再講。)
⑤私有的方法不能被覆蓋。(多態之后講)
⑥構造方法無法被覆蓋。因為構造方法無法被繼承。
⑦靜態的方法不存在覆蓋。(多態之后講)
⑧覆蓋指的是成員方法,和成員變量無關。
繼承最基本的作用:代碼重用。 繼承最重要的作用:方法可以重寫。
2.2.3 方法的重載與重寫的區別
方法重載(Overload)的條件:
①方法名稱相同
②方法參數類型、個數、順序至少有一個不同
③方法的返回類型可以不同,因為方法重載和返回類型沒有任何關系
④方法的修飾符可以不同,因為方法重載和修飾符沒有任何關系
⑤方法重載只出現在同一個類中
方法覆蓋(Override)的條件:
①必須要有繼承關系
②覆蓋只能出現在子類中,如果沒有繼承關系,不存在覆蓋,只存在重載
③在子類中被覆蓋的方法,必須和父類中的方法完全一樣,也就是方法名,返回類型、參數列表,完全一樣
④子類方法的訪問權限不能小於父類方法的訪問權限
⑤子類方法不能拋出比父類方法更多的異常,但可以拋出父類方法異常的子異常
⑥父類的靜態方法不能被子類覆蓋
⑦父類的私有方法不能覆蓋
⑧覆蓋是針對成員方法,而非屬性
注意:兩個方法要同為static或同為非static。
public class Test01{ public static void main(String[] args){ //創建子類對象 Cat c = new Cat(); //調用方法 c.move(); Animal a = new Animal(); a.move(); } } //父類:動物 class Animal{ //成員方法 public void move(){ System.out.println("動物在移動!"); } } //子類:貓 class Cat extends Animal{ //Cat的move方法應該輸出:貓在走貓步! //Animal中的move方法已經無法滿足Cat了。 //所以要在Cat類中對Animal類中的move方法進行重新定義(方法的覆蓋,方法的重寫,Overwrite,Override) public void move(){ System.out.println("貓在走貓步!"); } } |