class Fu {
int num = 30;
Fu() { show(); }
public void show() { System.out.println(num); }
}
class Zi extends Fu {
int num = 20;
public void show() { System.out.println(num); }
}
public class Demo {
public static void main(String[] args) { new Zi(); } // 輸出 0
}
new Zi() 調用子類構造器。super()(父類無參構造器)。show()。show()**。show() 打印 this.num(即 Zi.num)。Zi.num **尚未賦值**(子類字段初始化在 super() 之後),默認值 0。Zi.num = 20(字段初始化)。show() 則輸出 20。1. 父類靜態字段/靜態塊
2. 子類靜態字段/靜態塊
3. 父類實例字段/實例塊
4. 父類構造器
5. 子類實例字段/實例塊
6. 子類構造器
init() 方法,構造器最後調用,或由外部調用者顯式調用。@SuppressWarnings("OverridableMethodCallInConstructor") 僅在明確知情時壓制警告。**這是 Java 初始化順序與多態交互的經典陷阱,必須刻入肌肉記憶。**