java中子類繼承父類程式各成員的執行順序詳解?

java的面向物件包括封裝、繼承、多型3個主要要點,那麼子類繼承父類後程序中各成員的執行順序是怎樣的呢?下面教大家怎麼自己測試其執行順序。

java中子類繼承父類程式各成員的執行順序詳解

java中子類繼承父類程式各成員的執行順序詳解

java中子類繼承父類程式各成員的執行順序詳解

工具/原料

java執行環境

Notepad++

方法/步驟

首先定義2個類Person和Student,程式碼如圖所示。

java中子類繼承父類程式各成員的執行順序詳解

java中子類繼承父類程式各成員的執行順序詳解

因為目的是要解決子類繼承父類後程序的執行順序,所以只執行Student.java就可以了,如果執行Person.java就相當於沒有了繼承關係也失去了意義,故執行程式碼和結果如圖所示。

java中子類繼承父類程式各成員的執行順序詳解

由第二步可以看出靜態程式碼塊是程式首先執行的,而且先執行父類再執行子類的,並且有幾個物件只執行一次靜態程式碼塊。

其次是從程式主方法開始執行,再執行非靜態程式碼塊和無參建構函式,而且仍然是先執行父類再執行子類的。

如果子類含有有參的建構函式,那麼執行子類的有參建構函式,就不執行子類的無參構造函數了,但同樣要執行父類的無參建構函式。

看到這裡你會發現,非靜態程式碼塊和靜態程式碼塊的區別在於非靜態程式碼塊和建構函式一樣,需要建立一次物件就執行一次的。

隨後執行子類的成員函式,如果子類的成員函式重寫了父類的成員函式,則只執行子類的不執行父類的。

最後是主函式,因為主函式一個程式只有一個,所以只執行一次本程式的主函式。

java中子類繼承父類程式各成員的執行順序詳解

綜上所述,java中子類繼承父類程式各成員的執行順序應該是:

父類的靜態程式碼塊—>子類的靜態程式碼塊—>主方法(執行哪個程式就執行哪個程式的主方法)—>父類的非靜態程式碼塊—>父類的無參建構函式—>子類的非靜態程式碼塊—>子類的無參建構函式(若實際子類執行的是有參建構函式,則不執行無參建構函式)—>成員函式(指定執行哪個就執行哪個成員函式,若重寫了父類成員函式,則只執行子類的成員函式)

java中子類繼承父類程式各成員的執行順序詳解

注意事項

學習面向物件思想要結合實際考慮,初學者可能不容易理解,但做實際例子多的多了,自然而然就有了自己的思想,從而達到面向物件的要求。

想成為一個厲害的程式設計師,多敲程式碼吧!

相關問題答案