繼承和多型

2021-08-10 02:40:40 字數 1893 閱讀 2445

a、提高**的維護性

b、有利於**的管理

c、讓類與類產生一種關係(多型的前提)

* 子類繼承父類,讓父類先進行初始化,然後子類進行初始化(分層初始化)

* 構造方法的作用:給物件進行初始化

* 子類的有參構造和無參構造都要預設訪問父類的無參構造,如果沒有父類的無參構造,那麼子類的構造方法會報錯。

報錯怎麼解決?

a

、提供乙個無參構造

b

、通過super關鍵字訪問父類的有參構造 super(" ")

c

、間接通過this()關鍵字

overload(方法過載):方法名相同,引數不同(引數個數不同   引數資料型別不同),與返回值沒有任何關係

override:子類出現和父類一樣的方法宣告(許可權修飾符 返回值型別 方法名)

成員變數:當子類繼承父類,如果父類中的成員變數名稱和父類中的成員變數名稱不一致,就分別輸出;如果名稱一致:首先在子類的區域性位置中找,如果找到,就輸出;沒有找到,就在子類的成員位置找,找到就輸出,如果沒有就去父類的成員位置找,有就輸出。

成員方法:子類中的方法名和父類的方法名不同,分別呼叫;如果子類的方法名和父類的方法名一致,由於存在方法重寫,執行子類的成員方法;子類沒有這個方法,才會在父類中找,有就輸出。

5.final  fianlly (異常類)finalize(常用類)三者的區別

final表示最終的,不可修改的(終態的)

final修飾類:該類不可被繼承

final修飾成員方法:該方法不能被重寫

final修飾區域性變數:

基本資料型別:如果區域性變數是乙個基本資料型別,那麼被final修飾,基本資料型別的值不能再改變。

int num = 10  num = 100 ; //編譯通過  

final int num = 10; num = 100 ; // 編譯不通過,報錯

引用資料型別:如果final修飾引用資料型別的變數,那麼它不能再重新分配堆記憶體空間,但是可以改變成員變數的值。

多型的概念:乙個事物在不同時刻體現出來的不同狀態

animal a = new cat();    《貓是動物》

多型的三個前提條件(缺一不可):

a、必須有繼承關係,如果沒有繼承關係就談不上多型。

b、必須有方法重寫(子類出現了和父類一樣的方法宣告)。

c、有父類引用指向子類物件:向上轉型(使用父類物件)

成員變數:編譯看左,執行看左。

成員方法(非靜態方法):編譯看左,執行看右(由於存在方法重寫,所以就執行最終的就是子類的成員方法)

成員方法(靜態方法):算不上方法重寫,靜態直接跟類有關係,編譯看左,執行看左。

構造方法:還是對物件進行初始化,由於是繼承關係,還是分層初始化。

多型的好處:

a、提高**的維護性(由繼承保證)

b、提高**的擴充套件性(由多型保證)

多型的弊端:不能訪問子類特有功能

如何解決?

i:建立子類具體物件來訪問自己的特有功能。雖然可以解決多型的弊端,但是從記憶體角度考慮,需要建立子類物件,那麼必須在堆記憶體開闢空間。耗費記憶體,浪費空間。

ii:既然多型的第三個前提條件父類可以引用指向子類物件,那麼子類的引用也可以指向父類物件,也就是向下轉型。將父類的引用強制轉化為子類的引用,前提是父類引用必須存在,向下轉型必須依賴向上轉型。(一般情況下,向下轉型使用不當會造成乙個異常:轉化類異常,classcastexception)。

繼承和多型

物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...

繼承和多型

物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...

繼承和多型

類還有乙個重要的特性就是繼承,什麼是繼承?它又有什麼作用呢?繼承最主要的目的就是為了擴充套件原類的功能,加強或改進原類所沒有定義的屬性及方法。例如我們有狗這個類,可是狗的種類還是有很多,比如說博美狗,聖伯納,柴犬等等,如果只用狗一種類來定義所有種類狗的屬性及方法,那麼用這個類所產生出來的物件一定會有...