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

1:成員變量。函數

     當子父類中出現同樣的屬性時,子類類型的對象,調用該屬性,值是子類的屬性值。this

     若是想要調用父類中的屬性值,須要使用一個關鍵字:superspa

     This:表明是本類類型的對象引用。對象

     Super:表明是子類所屬的父類中的內存空間引用。繼承

     注意:子父類中一般是不會出現同名成員變量的,由於父類中只要定義了,子類就不用在定義了,直接繼承過來用就能夠了。內存

2:成員函數。編譯

當子父類中出現瞭如出一轍的方法時,創建子類對象會運行子類中的方法。好像父類中的方法被覆蓋掉同樣。因此這種狀況,是函數的另外一個特性:重寫變量

3:構造函數。權限

發現子類構造函數運行時,先運行了父類的構造函數。爲何呢?構造函數

緣由:子類的全部構造函數中的第一行,其實都有一條隱身的語句super();

super(): 表示父類的構造函數,並會調用於參數相對應的父類中的構造函數。而super():是在調用父類中空參數的構造函數。

爲何子類對象初始化時,都須要調用父類中的函數?(爲何要在子類構造函數的第一行加入這個super()?)

由於子類繼承父類,會繼承到父類中的數據,因此必需要看父類是如何對本身的數據進行初始化的。因此子類在進行對象初始化時,先調用父類的構造函數,這就是子類的實例化過程

 

注意:子類中全部的構造函數都會默認訪問父類中的空參數的構造函數,由於每個子類構造內第一行都有默認的語句super();

若是父類中沒有空參數的構造函數,那麼子類的構造函數內,必須經過super語句指定要訪問的父類中的構造函數。

若是子類構造函數中用this來指定調用子類本身的構造函數,那麼被調用的構造函數也同樣會訪問父類中的構造函數。

問題:

super()和this()是否能夠同時出現的構造函數中?

兩個語句只能有一個定義在第一行,因此只能出現其中一個。

super()或者this():爲何必定要定義在第一行?

由於super()或者this()都是調用構造函數,構造函數用於初始化,因此初始化的動做要先完成。

在方法覆蓋時,注意兩點:

1:子類覆蓋父類時,必需要保證,子類方法的權限必須大於等於父類方法權限能夠實現繼承。不然,編譯失敗。(舉個例子,在父類中是public的方法,若是子類中將其下降訪問權限爲private,那麼子類中重寫之後的方法對於外部對象就不可訪問了,這個就破壞了繼承的含義)

2:覆蓋時,要麼都靜態,要麼都不靜態。 (靜態只能覆蓋靜態,或者被靜態覆蓋)

 

繼承的一個弊端:打破了封裝性。對於一些類,或者類中功能,是須要被繼承,或者複寫的。

這時如何解決問題呢?介紹一個關鍵字,final

final特色:(詳細解釋見前面)

1:這個關鍵字是一個修飾符,能夠修飾類,方法,變量。

2:被final修飾的類是一個最終類,不能夠被繼承。

3:被final修飾的方法是一個最終方法,不能夠被覆蓋。

4:被final修飾的變量是一個常量,只能賦值一次。

相關文章
相關標籤/搜索