方法重寫實現多態


  首先,需要明白類的加載順序。詳情請參考https://www.cnblogs.com/wwb0811/p/9602148.html
(1) 父類靜態代碼塊(包括靜態初始化塊,靜態屬性,但不包括靜態方法)
(2) 子類靜態代碼塊(包括靜態初始化塊,靜態屬性,但不包括靜態方法 )
(3) 父類非靜態代碼塊( 包括非靜態初始化塊,非靜態屬性 )
(4) 父類構造函數
(5) 子類非靜態代碼塊 ( 包括非靜態初始化塊,非靜態屬性 )
(6) 子類構造函數
 
  

        代碼示例如上所示:

   其中:類中靜態塊按照聲明順序執行,並且(1)和(2)不需要調用new類實例的時候就執行了(意思就是在類加載到方法區的時候執行的)
   2.其次,需要理解子類覆蓋父類方法的問題,也就是方法重寫實現多態問題。
   Base b = new Sub();它為多態的一種表現形式,聲明是Base,實現是Sub類, 理解為 b 編譯時表現為Base類特性,運行時表現為Sub類特性。
當子類覆蓋了父類的方法后,意思是父類的方法已經被重寫,題中父類初始化調用的方法為子類實現的方法,子類實現的方法中調用的baseName為子類中的私有屬性。
   由1.可知,此時只執行到步驟4.,子類非靜態代碼塊和初始化步驟還沒有到,子類中的baseName還沒有被初始化。所以此時 baseName為空。 所以為null。


免責聲明!

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



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