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修飾的變量是一個常量,只能賦值一次。