1.什么是方法的重寫?
子類繼承父類之后,就擁有了符合權限的父類的屬性和方法,但是當父類的方法不符合子類的要求的時候,子類也可以重新的書寫自己想要的方法。
所以,方法的重寫,也叫方法的覆蓋,即子類繼承父類的方法后,由於父類的方法不滿足子類的需求,子類重新書寫該方法。
2.方法重寫的條件
前提條件:必須是子類,才能重寫父類中的具有繼承權限的方法。
從書寫一個方法的順序要求:
權限修飾符必須大於或者等於父類的權限修飾符;
方法名、返回值類型、參數一致;
拋出的異常必須比父類的要小。
在第4點有每一個不符合的錯誤。
3.方法重寫實例
父類:
package com.dh.oop;
public class Parent {
public void print(){
System.out.println("我是爸爸");
}
}
子類:
package com.dh.oop;
public class Son extends Parent{
}
- 當子類沒有重寫父類的方法的時候,new一個子類對象,調用該方法:
package com.dh.oop;
public class OverrideDemo {
public static void main(String[] args) {
Son son = new Son();
son.print();
}
}
結果:
因為此時子類沒有該方法,但是繼承了父類的方法,所以調用的是父類的方法。
現在子類中重寫該print方法:
package com.dh.oop;
public class Son extends Parent{
@Override
public void print() {
System.out.println("我是兒子");
}
}
-
當子類重寫了父類的方法之后,new子類對象,調用該方法:
(小tip:alt+ins可以直接選擇並生成想重寫的方法)
package com.dh.oop;
public class OverrideDemo {
public static void main(String[] args) {
Son son = new Son();
son.print();
}
}
結果:
因為此時在子類中重寫了父類的方法,所以子類對象調用的就是子類的方法了。
4.不滿足重寫方法的情況
-
權限修飾符小於父類:
-
返回值不一樣:
-
方法名不一樣:
-
參數不一樣:
-
拋出的異常大於父類:
5.重寫與重載的區別
- 重載:重載發生在同一個類中,方法名相同,參數類型不同(順序、個數、類型),通過參數的類型來區別調用的是哪一個方法。
- 重寫:重寫發生在子類中,方法名、返回值、參數相同,權限修飾符要大於或等於父類方法中的權限修飾符,拋出的異常要小於父類方法中拋出的異常,通過調用的對象來區別調用的是父類的方法還是子類的方法。
本人水平有限,若有錯誤,請指出,感激不盡~