Note 8 繼承 重寫

2021-04-13 22:16:21 字數 1782 閱讀 4040

重寫(

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 訪問修飾符相同或者比父類...