JAVA知識基礎(八):繼承

1.概述

1.1、繼承的由來
至於由來簡單一句話:多個類中存在相同屬性和行爲時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行爲。

繼承描述的是事物之間的所屬關係,這種關係是 is-a 的關係。

1.2、繼承的定義
繼承:就是子類繼承父類的屬性和行爲,使得子類對象具有與父類相同的屬性、相同的行爲。子類可以直接訪問父類中的非私有的屬性和行爲。

這裏再聲明一點,父類又稱爲超類或者基類。而子類又稱爲派生類這點很基礎!

1.3、繼承的優點
提高代碼的複用性。
類與類之間產生關係,爲多態做了完美的鋪墊(不理解沒關係,之後我會再寫一篇多態的文章)
雖然繼承的優點很多但是Java只支持單繼承,不支持多繼承。

1.4、繼承的格式
通過 extends 關鍵字,可以聲明一個子類繼承另外一個父類,定義格式如下:

  class 父類 {
   ... 
   }
   class 子類 extends 父類 { 
   ... 
}

2.關於繼承之後的成員變量

當類之間產生了關係後,其中各類中的成員變量,產生了哪些影響呢? 關於繼承之後的成員變量要從兩方面下手,一是成員變量不重名方面,二是成員變量重名方面。

如果子類父類中出現不重名的成員變量,這時的訪問是沒有影響的.

如果子類父類中出現重名的成員變量,這時的訪問是有影響的
子父類中出現了同名的成員變量時,在子類中需要訪問父類中非私有成員變量時,需要使用 super 關鍵字,至於修飾父類成員變量,類似於之前學過的 this 。 使用格式 super.父類成員變量名

如果父類中的成員變量非私有:子類中可以直接訪問。私有:子類是不能直接訪問的。

3.關於繼承之後的成員方法

當類之間產生了關係,其中各類中的成員方法,又產生了哪些影響呢? 同樣我們依舊從兩方面分析。

如果子類父類中出現不重名的成員方法,這時的調用是沒有影響的。對象調用方法時,會先在子類中查找有沒有對 應的方法,若子類中存在就會執行子類中的方法,若子類中不存在就會執行父類中相應的方法.

成員方法重名大體也可以分兩種情況:
1、方法名相同返回值類型、參數列表卻不相同(優先在子類查找,沒找到就去父類)
2、方法名、返回值類型、參數列表都相同,沒錯這就是重寫(Override)

重寫 :子類中出現與父類一模一樣的方法時(返回值類型,方法名和參數列表都相同),會出現覆蓋效果,也稱爲重寫或者複寫。聲明不變,重新實現。

4.關於繼承之後的構造方法

構造方法的名字是與類名一致的,所以子類是無法繼承父類構造方法的。

構造方法的作用是初始化成員變量的。所以子類的初始化過程中,必須先執行父類的初始化動作。子類的構造方法中默認會在第一句代碼中添加super(),表示調用父類的構造方法,父類成員變量初始化後,纔可以給子類使用。

super() 不寫也默認存在,而且只能是在第一句代碼中。
下一篇是關於this與super關鍵字的總結。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章