インスタンス変数はいつ初期化されますか?コンストラクターブロックが完了した後ですか、それとも前ですか?
この例を考えてみましょう。
public abstract class Parent {
 public Parent(){
   System.out.println("Parent Constructor");
   init();
 }
 public void init(){
   System.out.println("parent Init()");
 }
}
public class Child extends Parent {
private Integer attribute1;
private Integer attribute2 = null;
public Child(){
    super();
    System.out.println("Child Constructor");
}
public void init(){
    System.out.println("Child init()");
    super.init();
    attribute1 = new Integer(100);
    attribute2 = new Integer(200);
}
public void print(){
    System.out.println("attribute 1 : " +attribute1);
    System.out.println("attribute 2 : " +attribute2);
}
}
public class Tester {
public static void main(String[] args) {
    Parent c = new Child();
    ((Child)c).print();
    
}
}
出力:
親コンストラクタ
子init()
親Init()
子コンストラクター
属性1:100
属性2:null
- アトリビューション1と2のメモリはいつヒープに割り当てられますか? 
- 属性2がNULLである理由を知りたいですか? 
- 設計上の欠陥はありますか?