在new建立物件時,首先對物件屬性和初始化塊分配記憶體,並執行預設初始化。如果存在父類,則先為父類物件屬性和初始化塊先分配記憶體並執行初始化。然後執行父類構造器中的初始化程式,接著才開始對子類的物件屬性和初始化塊執行初始化。
我們修改一下**,看一下繼承的初始化順序:
package com.ws.basic;
class gameobject
public int life_reduce(int ai_reduce)
public int life_add(int ai_add) }
class creature extends gameobject
public void move()
public void normal_attack()
}class hero extends creature
// 重寫普通攻擊方法
public void normal_attack()
public void skill_attack()
public void eat_food(int food)
}public class testjc
}
執行:
gameobject建立!
creature建立!
hero建立!
**師甘道夫用火球攻擊!
結論:通過**的執行,我們可以清晰的了解繼承時候的初始化順序,系統首先初始化了gameobject,然後初始化了creature,接著初始化了hero。所以,對於乙個問題加深理解最好的方法,就是寫段**,測試一下。
java中繼承的初始化順序
1 繼承的初始化順序 a 初始化父類再初始化子類 b 先執行初始化物件中屬性,再執行構造方法中的初始化 eg a public class animal public animal public class dog extends animal public class initail 輸出結果 a...
java初始化順序
1 父類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 2 子類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 3 父類例項成員和例項初始化塊 按在 中出現的順序依次執行 4 父類構造方法 5 子類例項成員和例項初始化塊 按在 中出現的順序依次執行 6 子類構造方法 public abstr...
java初始化順序
例如以下 package chapter5 public class demo1one public void printinfo public static void main string args 程式一開始先執行 private static string password 0721 這行 ...