日期:2014-05-20  浏览次数:20686 次

对象实例化过程
class F{
int i=10;
F(){
print();
i=20;
}
void print(){
System.out.println(i);
}
}

class M extends F{
int j=30;
M(){
print();
j=40;
}
void print(){
System.out.println(j);
}
}


实力话子类首先是调用父类的构造器还是还是给属性赋值???
谁帮我解释下具体过程?

------解决方案--------------------
象这个例子,假如运行 M m=new M(); 其过程是先给子类的属性j分配存储空间,并赋默认值0,之后向上追溯父类,给父类的属性 i 分配存储空间,并赋默认值0,再向上追溯到Object. 返回来,再给i显式赋值10,执行父类构造方法, 里面有个print(),这个方法被子类覆写了,所以实际执行的是子类的print()方法。会输出j,这时j=0,所以输出0。并给属性i赋值20。
然后回到子类,继续初始化,先给属性显式赋值j=30,再执行构造方法,这时输出30。最后给j赋值40,初始化结束。

楼主可参考一下:
http://wenwen.soso.com/z/q191435823.htm
讲得比较好。