public class fathertest
public fathertest(string name)
static
public void speak()
//加入乙個main程式後
public static void main(string args)
}
結果:
可以很明顯的看出來執行順序:靜態**塊—主程式—非靜態**塊—建構函式—一般方法。
public class sontest extends fathertest
sontest()
sontest(string name)
@override
public void speak()
//然後再加入乙個main函式
public static void main(string args)
}
結果:
加入了子類以後,執行順序有了新的變化,我們可以總結一下。首先第一部分執行的是父類的靜態**塊—子類的靜態**塊—主程式。這一部分都是執行一次,與建立多少物件沒有關係。第二部分new了乙個父類物件,並呼叫了方法。執行了它的非靜態**塊—建構函式—一般方法。第三部分new了乙個子類的物件,並呼叫了方法。執行順序為父類的非靜態**塊—父類的無參建構函式,然後是子類的非靜態**塊—子類建構函式—子類的方法。
java中子類繼承父類程式執行順序
我們經常在專案中使用繼承,但是往往不太明白,程式執行的順序以及原理,尤其是使用上轉型物件的時候,以及父類子類中都有static變數和方法時,不知道先執行誰。下面是乙個簡單的繼承,來檢視 的執行順序 package test class person person class student exte...
java中子類繼承父類方法及呼叫規則
有時候我們會遇到這種情況 父類中有方法a和方法b,方法a中呼叫了方法b。某類繼承該類,重寫了方法b,但沒有對方法a進行重寫。那麼在用子類的例項呼叫該方法a時,最終會執行哪乙個方法b呢?我們可以寫一段簡單的程式驗證一下。class a void printword class b extends a ...
java中子類能不能繼承父類構造方法
結果有些和想象中的不一樣吧。原因如下 其實每個子類構造方法的第一條語句,都是隱含地呼叫super 如果父類沒有這種形式的建構函式,那麼在編譯的時候就會報錯。所以父類中的構造方法是不能繼承的,但是在例項化子類的時候會呼叫父類的構造方法,這樣就能解釋下面這種情況了。面試題目1 指出下面程式的執行結果 p...