20207 23方法重寫與抽象多型

2021-10-08 10:36:15 字數 1477 閱讀 3975

一、 方法的重寫或方法的覆蓋:

1.子類根據需求對父類繼承的方法進行重新編寫

2.重寫時,可以用super.方法的方式來保留父類的方法

注意:構造方法無法被重寫!!!

3.方法重寫規則:在繼承的情況下,子類的方法滿足以下條件:

1.方法名相同,引數列表相同

2.返回值型別相同或者是其父類返回值的子類

3.父類的靜態方法不可被重寫為非靜態方法,反之父類的非靜態方法也不能改寫為靜態方法。

4.子類無法重寫父類的私有方法

4.方法重寫和方法過載的區別:

3.訪問許可權不能小於於父類 方法

4.丟擲的異常不能多於父類

二、super:

super.print():訪問父類的非private方法

super.name:訪問父類的非private屬性

super(); 訪問父類的無參構造方法

super(name);訪問父類的帶參構造方法

注意:1.super 只能在子類的方法和構造方法中

2.1.super呼叫構造方法時,只能是第一句

2.子類會覆蓋父類的同名成員,此時可使用super呼叫父類被子類覆蓋的成員super,***;

3.this和super的區別:

訪問爺爺類(間接父類)的成員時,只需要寫super.xx就行,乙個子類可以同時有多個間接父類

三、繼承條件下構造方法的呼叫規則:

1.當子類構造方法沒有通過super顯式呼叫父類的有參構造方法,也沒通過this顯式呼叫自身其它構造方法時,系統預設呼叫父類的無參構造方法

2.子類使用super呼叫父類帶參構造方法時,就不會呼叫父類的無參構造方法

四、object類

1.objectk類是所有類的直接或間接父類

2.object類被子類經常重寫

3.判斷兩個物件是否為同乙個物件:==或者使用equals()

4.instanceof:用來判斷某個物件是否為某種型別

物件名 instanceof 型別

五、多型

定義:同乙個引用型別,使用不同的例項而執行不同操作

物件引用父類型別時,不能直接使用子類物件

六、抽象方法

抽象類不能被例項化,例項化毫無意義,但是可以new子類物件,抽象方法所在類必須時抽象類,但是抽象類中,可以沒有抽象方法

定義:沒有方法體,必須在抽象類裡

必須在子類中被實現,除非子類是抽象類

抽類中不一定需要抽象方法

抽象類不能被例項化,會沒有意義

涉及型別轉換的時候,如果有多種可能,最好用instanceof進行判斷

七、向上(下)轉型

父親型 引用變數=new 子型別

此方法通過父親引用變數呼叫的方法是子類覆蓋或繼承父類的方法,而不是父類的方法

在向下轉型如果沒有轉化為真實的子類型別,會出現執行報錯classcastexceptiong

向下轉型:

子型別 引用變數 =(子型別)父親型別的引用變數

05 方法重寫

在繼承關係中,子類如果定義了乙個與父類方法簽名完全相同的方法,被稱為覆寫 override 加上 override可以讓編譯器幫助檢查是否進行了正確的覆寫。例如,在person類中,我們定義了run 方法 class person 在子類student中,覆寫這個run 方法 class stude...

02 24 方法重寫與虛方法呼叫

前一篇隱藏的例項中,由於子類隱藏了父類的同名方法,如果不進行強制轉換,就無法通過父類變數直接呼叫子類的同名方法,哪怕父類變數引用的是子類變數。我們希望的是每個物件 各司其職 為了達到這個目的,可以在父類同名方法前加關鍵字virtual,表明這是乙個虛方法,子類可以重寫此方法 即在子類同名方法前加關鍵...

20201202 103 方法的重寫

類成員的繼承和重寫 成員繼承 子類繼承了父類除構造方法之外的所有成員。方法重寫 子類可以重新定義父類中的方法,這樣就會覆蓋父類的方法,也稱為 重寫 案例 繼承和重寫的案例 class person def init self,name,age self.name name self.age age ...