心法口訣:1. 建立子類物件時,一定會優先初始化父類; (因為子類有可能使用到父類的成員)
2. 建立子類物件,子類的構造方法中,一定會有乙個構造方法中有super();去呼叫父類的構造方法,對父類進行初始化;
3. 初始化順序:
父類–靜態變數
父類–靜態初始化塊
子類–靜態變數
子類–靜態初始化塊
父類–變數
父類–初始化塊
父類–構造器
子類–變數
子類–初始化塊
子類–構造器
注意事項:
super()呼叫父類的構造方法,只能在子類的構造方法中使用,也只能在第一行;
執行結果:
1.父類的靜態
2.子類靜態
3.c類的靜態
4.c類的構造方法
5.父類的構造方法
6.c類的構造方法
7.子類的構造**塊
8.子類的成員方法
9.子類構造方法
執行步驟: (這裡a類是b類的 父類 c類是單獨的)
先看main函式,main函式是執行入口。 new b 建立b例項化物件,b類繼承了a類 ,b類中有乙個隱藏的super,所以會優先初始化 a類(因為子類有可能使用到父類的成員),按照心法口訣來,首先是a類輸出父類的靜態**塊;其次是b類輸出子類的靜態**塊;再是父類a成員位置的new c() 建立c例項化物件,這時會去先執行c的靜態**塊,然後執行其c的類構造方法;在回到a類繼續向下執行輸出父類的構造方法;父類執行完後輪到子類執行,子類成員位置的new c() 建立c例項化物件,由於靜態**塊只執行一次,所以只執行c的類構造方法;在回到b類繼續向下執行輸出子類的構造**塊,子類構造**塊中呼叫了method方法,所以先執行輸出子類的成員方法,最後就是子類的構造方法
class zi extends fu
public void show()
public static void main(string args)
}class fu
public void show()
}
輸出0的原因是:執行父類的構造方法時,父類的成員變數已經初始化,但是子類還沒有初始化,由於多型的原因,父類構造器的show()方法執行的是子類中的show()方法,相當於this.show(),但是子類中的x還沒顯示初始化,所以值為0,則列印出zi 0,而不是zi 1.
初始化的實際過程:
1.在其他任何事物發生之前,將分配給物件的儲存空間初始化成二進位制的零.
2.如前所述那樣呼叫基類構造器.此時,呼叫覆蓋後的方法(要在子類構造器之前呼叫),由於步驟一的緣故,我們此時發現x的值為0.
3.按照宣告的順序呼叫成員的初始化方法.
4.呼叫匯出類的構造器主題.
乙個執行記時類
using system using system.collections.generic using system.text using system.runtime.interopservices using system.diagnostics.codeanalysis namespace c...
乙個 Spark 應用程式的完整執行流程
2 打 jar 包,通過 spark submit 提交執行 3 sparksubmit 提交執行 6 執行到 action 運算元,這個階段會產生 dag 血緣依賴關係,但是並沒有真正執行 7 執行 action 運算元,生成乙個 job 提交執行 8 dagscheduler 會對提交的 job...
python 之 類(乙個類包含乙個類)
1.知識點 1 乙個類可以作為另乙個類的元素。2 當乙個類的屬性為列表新增另乙個類名時,會預設新增另乙個類的 str self 的返回值 箱子 class box 屬性 def init self,b color,b volumn self.color b color self.volumn b v...