重寫(
override
):override
也可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了乙個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的重寫就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類重寫父類中的方法。
重寫的標準:
1、重寫的方法的標誌必須要和被重寫的方法的標誌完全匹配,才能達到重寫的效果;
2、重寫的方法的返回值必須和被重寫的方法的返回一致;
3、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;
4、被重寫的方法不能為
private
,否則在其子類中只是新定義了乙個方法,並沒有對其進行重寫。
過載(overload
):overload
對我們來說可能比較熟悉,可以翻譯為過載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入引數來區分這些方法,然後再呼叫時,
vm就會根據不同的引數樣式,來選擇合適的方法執行。
過載的標準:
1、在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序(當然,同一方法內的幾個引數型別必須不一樣,例如
fun(int, int)
就沒有引數順序可言了);
2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
以上的概念我向大家都很熟悉了,今天要討論的問題主要是和重寫有關。
下面是例項**:
父類:public class parent
public void p2()
public void p3() }
接著是子類:
public class child extends parent
public void c2()
public void p2() }
最後是測試類:
public class test }
執行測試類後,輸出的結果如下:
parent print p1
child
print p2
而不是parent print p1
parent
print p2
用乙個很簡單的方法理解的話,當
child
繼承parent
,並且重寫了
p2()
方法,child
類可以看成如下的形式:
public class child extends parent
public void c2() //
重寫的方法
p2();
public void p2() //
繼承的方法
p1();
public void p1() //
繼承的方法
p3();
public void p3() }
這樣就比較方便的理解上面輸出的結果了。
為了測試,我們可以這樣改寫
child
類:public class child extends parent
public void c2()
public void p2()
}重新改寫測試類:
public class test }
輸出結果為:
parent print p3
child print c1
這裡的結果,我想大家都應該能理解了。
java 繼承 重寫
package inheritance.override 1 先開闢空間 2 再呼叫構造器 父類宣告賦值 父類構造器 子類宣告賦值 子類構造器 3 返回位址 屬性 就近原則 父類中的方法 如果重寫 找重寫,沒有重寫 找父類 新增不可見 先編譯後執行 編譯 從 所屬的當前類中向上找object 就近最...
繼承 重寫 super
繼承 extends,子類自動擁有父類的所有可繼承的屬性和方法。只支援單繼承,不可多重繼承,如 extends a,b 是錯誤的。可以多層繼承。重寫 子類重寫父類的方法時,不能使用比父類中被重寫的方法更嚴格的訪問許可權。super 1 呼叫父類成員變數 成員方法 super.成員變數 super.成...
繼承 過載 重寫
一 過載和重寫 過載 方法名相同,引數不同 引數型別或者引數個數 可以存在不同的返回值 重寫 1 方法名相同 2 引數相同 引數型別和引數個數 3 返回值型別為基本資料型別時 返回值型別需和父類相同。返回值為引用型別時 返回值型別相同或者返回值型別是父類返回值型別的子類 4 訪問修飾符相同或者比父類...