java 子類的實例化和代碼塊初始化過程


1,子類的實例化

  1,子父類中的構造函數的特點。

  在子類構造對象時,發現,訪問子類構造函數時,父類也運行了。
  為什么呢?
  原因是:在子類的構造函數中第一行有一個默認的隱式語句。 super();

  子類的實例化過程:子類中所有的構造函數默認都會訪問父類中的空參數的構造函數。
   
  為什么子類實例化的時候要訪問父類中的構造函數呢?
  那是因為子類繼承了父類,獲取到了父類中內容(屬性),所以在使用父類內容之前,
  要先看父類是如何對自己的內容進行初始化的。

  所以子類在構造對象時,必須訪問父類中的構造函數。
  為什么完成這個必須的動作,就在子類的構造函數中加入了super()語句。

  如果父類中沒有定義空參數構造函數,那么子類的構造函數必須用super明確要調用
  父類中哪個構造函數。同時子類構造函數中如果使用this調用了本類構造函數時,
  那么super就沒有了,因為super和this都只能定義第一行。所以只能有一個。
  但是可以保證的是,子類中肯定會有其他的構造函數訪問父類的構造函數。


  注意:supre語句必須要定義在子類構造函數的第一行。因為父類的初始化動作要先完成。

    1,子類構造時會通過super()方法先構造父類(子類的所有構造函數都會訪問父類中空參數的構造函數,如果父類中沒有空參構造函數,在子類重要添加super()在    子類  的構造第一行)。

    2,構造函數不存在繼承和覆蓋

  

  

  

   2,一個對象實例化過程:
  Person p = new Person();
  1,JVM會讀取指定的路徑下的Person.class文件,並加載進內存,
      並會先加載Person的父類(如果有直接的父類的情況下).
  2,在堆內存中的開辟空間,分配地址。
  3,並在對象空間中,對對象中的屬性進行默認初始化。
  4,調用對應的構造函數進行初始化。
  5,在構造函數中,第一行會先到調用父類中構造函數進行初始化
  6,父類初始化完畢后,在對子類的屬性進行顯示初始化
  7,在進行子類構造函數的特定初始化。
  8,初始化完畢后,將地址值賦值給引用變量.

2,代碼塊初始化過程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM