繼承,面向對象特徵之一

繼承(面向對象特徵之一)

好處:1:提高了代碼的複用性。2:讓類與類之間產生了關係,提供了另一個特徵多態的前提。

父類的由來:其實是由多個類不斷向上抽取共性內容而來的。java中對於繼承,java只支持單繼承。java雖然不直接支持多繼承,但是保留了這種多繼承機制,進行改良。

單繼承:一個類只能有一個父類。

多繼承:一個類可以有多個父類。

爲什麼不支持多繼承呢?

因爲當一個類同時繼承兩個父類時,兩個父類中有共同的功能,那麼子類對象調用該功能時,運行哪一個呢?因爲父類中的方法存在方法體。

但是java支持多重繼承。A繼承B,B繼承C,C繼承D。
多重繼承的出現,就有了繼承體系。體系中的頂層父類是通過不斷向上抽取而來的。它裏面定義的該體系最基本最共性內容的功能。
所以,一個體系要想被使用,直接查閱該系統中的父類的功能即可知道該體系的基本用法。那麼想要使用一個體系時,需要建立對象。建議建立最子類對象,因爲最子類不僅可以使用父類中的功能,還可以使用子類特有的一些功能,
簡單說:對於一個繼承體系的使用,查閱 頂層父類中的內容,創建最底層子類的對象。
子父類出現後,類中的成員都有了那些特點:
1:成員變量。
       當子父類中出現一樣的屬性時,子類類型的對象,調用該屬性,值是子類的屬性值。如果想要調用父類中的屬性值,需要使用一個關鍵字:super
       This代表是本類類型的對象引用。
       super代表的是子類所屬的父類中的內存空間引用。
注意:子父類中通常是不會出現同名成員變量的,因爲父類中只要定義了,子類就不用再定義了,直接繼承過來用就可以了。
2:成員函數。
當子父類中出現了一模一樣的方法時,建立子類對象就會運行子類中的方法。好像父類中的方法被覆蓋掉一樣,所以這種情況,是函數的另一個特性:覆蓋(複寫,重寫)。
什麼時候使用覆蓋呢?當一個類的功能內容需要修改時,可以通過覆蓋來實現。
3:構造函數。
發現子類構造函數運行時,先運行了父類的構造函數。爲什麼呢?
原因:子類的所以構造函數中的第一行,其實都有一條隱身的語句super()。
super():表示父類的構造函數,並會調用與參數相對應的父類中的構造函數。而super():是在調用父類中空參數的構造函數。
爲什麼子類對象初始化是,都需要調用父類中的函數?(爲什麼要在子類構造函數的第一行加入這個super()?)
因爲子類繼承父類,會繼承到父類中的數據,所以必須要看父類是如何對自己的數據進行初始化的。所以子類在進行對象初始化時,先調用父類的構造函數,這就是子類的實例化過程。
注意:子類中所有的構造函數都會默認訪問父類中的空參數的構造函數,因爲每一個子類構造內第一行都有默認的語句super()。
如果父類中沒有空參數的構造函數,那麼子類的構造函數內,必須通過super語句指定要訪問的父類中的構造函數。
如果子類構造函數中用this來指定調用子類自己的構造函數,那麼被調用的構造函數已一樣會訪問父類中的構造函數。
問題:super()和this()是否可以同時出現在構造函數中
兩個語句只能有一個定義在第一行,所以只能出現其中一個。
super()或this():爲什麼一定要定義在第一行?
因爲super()或者this()都是調用構造函數,構造函數用於初始化,所以初始化的動作要先完成。




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