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關鍵字的總結。