我寫了下面的代碼併爲超類創建了對象。爲什麼子類的靜態代碼得到執行?
class SuperClass{
static int a=2;
static int b(){
return 2;
}
int c(){
return 2;
}
SuperClass(){
System.out.println("Super");
}
static {
System.out.println("super");
}
}
public class Sub extends SuperClass{
Sub(){
System.out.println("Sub");
}
static {
System.out.println("sub");
}
static int b(){
return 3;
}
int c(){
return 3;
}
public static void main(String ax[]){
SuperClass f =new SuperClass();
System.out.println(f.c());
System.out.print(SuperClass.b());
}
}
當我檢查了輸出,則如下:
super
sub
Super
2
2
我知道,當類對象初始化或任何靜態參考由靜塊時,纔會執行。但是在這裏,我沒有把這些東西交給Sub類。那麼爲什麼我會看到「sub」即子類的靜態塊輸出?
執行'main'方法(嵌套在'Sub'類中)是一個靜態引用。 :) –
@KonstantinYovkov我想過,但即使如此,「子」應該是第一個正確的。現在,這個疑問從Bathsheba的答案中清除了,因爲靜態塊按照超類和子類的順序執行。謝謝。 – AV94
@anil首先,'Sub'類仍然依賴於'Super'類,因此它首先被執行。 – njzk2