最近因為面試的原因,回過頭來複習基礎的知識,都忘光了,準備買本面試書回來啃。
我先把自己測試的結論總結寫出來,以後忘記再來看看
如果b類繼承自a類,在main方法中new出b的物件(不帶引數),那麼他執行的順序是:
父類a的靜態方法-->
類b的靜態方法-->
父類a的非靜態方法(不指定方法名)-->父類a的無參構造-->
這個時候在父類無參構造裡面呼叫了父類的print方法,兩種可能
1.如果子類沒有相應的print方法,那麼直接呼叫父類的print方法。
2.如果子類重寫了父類的print方法,那麼不會呼叫父類的print,優先呼叫子類的print方法,但是仍然可以在子類的print方法裡面使用super呼叫父類的print方法。
-->
子類b的非靜態方法(不指定方法名)-->子類b的無參構造方法
這裡註明一點,如果在new出b物件的時候帶上引數,那麼大致仍然是上面的流程,只是會呼叫父類的無參構造(所以在new子類物件的時候,不管帶不帶引數,都一定會執行父類的無參構造),而後子類則是呼叫有參構造方法。上面寫的有點繞,最好自己測試下,然後總結。
貼上測試的原始碼:
package test1;
public class test1
static
public a()
public a(int x)
public void print() }
static class b extends a
static
public b()
public b(int x)
public void print() }
public static void main(string args)
}
java繼承時的方法呼叫順序記錄
類b繼承類a,當例項化乙個b型別時,執行順序為 a的靜態 塊 b的靜態 塊 a的構造 塊 a的無參建構函式 b的構造 塊 b的無參建構函式 public class test1 class a public a public a int a class b extends a public b pu...
Java繼承時的呼叫順序。
繼承時,我們往往會關注屬性和靜態屬性和構造方法之間的初始化順序是什麼樣的 答案是 先static 建立物件後 然後父類屬性,父類構造方法 最後子類屬性,子類構造方法。package beetle class insect static int x1 prt static insect.x1 init...
Java 構造方法呼叫順序
public class testsuper02 class fatherclass class childclass extends fatherclass 執行結果 開始建立乙個childclass物件 建立fatherclass 建立childclass 要點 關於構造方法結合繼承概念的呼叫,...