当doees实例变量被初始化?它是在构造器块完成之后还是在它之前?什么时候实例变量被初始化并赋值?
考虑这个例子:
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();
}
}
OUTPUT:
父类的构造
儿童的init()
父初始化()
儿童构造
属性1:100
属性2:空
当记忆为属性1 & 2分配在堆中?
想知道为什么属性2是NULL?
是否有任何设计缺陷?
顺便说一句,Java实例变量的术语是“field”。 –