1,子類的實例化函數
1,子父類中的構造函數的特色。this
在子類構造對象時,發現,訪問子類構造函數時,父類也運行了。
爲何呢?
緣由是:在子類的構造函數中第一行有一個默認的隱式語句。 super();
子類的實例化過程:子類中全部的構造函數默認都會訪問父類中的空參數的構造函數。
爲何子類實例化的時候要訪問父類中的構造函數呢?
那是由於子類繼承了父類,獲取到了父類中內容(屬性),因此在使用父類內容以前,
要先看父類是如何對本身的內容進行初始化的。
因此子類在構造對象時,必須訪問父類中的構造函數。
爲何完成這個必須的動做,就在子類的構造函數中加入了super()語句。
若是父類中沒有定義空參數構造函數,那麼子類的構造函數必須用super明確要調用
父類中哪一個構造函數。同時子類構造函數中若是使用this調用了本類構造函數時,
那麼super就沒有了,由於super和this都只能定義第一行。因此只能有一個。
可是能夠保證的是,子類中確定會有其餘的構造函數訪問父類的構造函數。
注意:supre語句必需要定義在子類構造函數的第一行。由於父類的初始化動做要先完成。spa
1,子類構造時會經過super()方法先構造父類(子類的全部構造函數都會訪問父類中空參數的構造函數,若是父類中沒有空參構造函數,在子類重要添加super()在 子類 的構造第一行)。對象
2,構造函數不存在繼承和覆蓋blog
2,一個對象實例化過程:
Person p = new Person();
1,JVM會讀取指定的路徑下的Person.class文件,並加載進內存,
並會先加載Person的父類(若是有直接的父類的狀況下).
2,在堆內存中的開闢空間,分配地址。
3,並在對象空間中,對對象中的屬性進行默認初始化。
4,調用對應的構造函數進行初始化。
5,在構造函數中,第一行會先到調用父類中構造函數進行初始化。
6,父類初始化完畢後,在對子類的屬性進行顯示初始化。
7,在進行子類構造函數的特定初始化。
8,初始化完畢後,將地址值賦值給引用變量.繼承
2,代碼塊初始化過程內存