public B() 的时间 先做的是super();super() 中
public A(){
System.out.println("aaa");
dosomething();
}先输出aaa 而后 dosomething(); 而又由于在 B中 覆写了 dosomething();于是调用
B.dosomething(); 在 B.dosomething();中的Bvar没有初始化,于是输出Bvar=0;
public A(){
System.out.println("aaa");
dosomething();
}先输出aaa 而后 dosomething(); 而又由于在 B中 覆写了 dosomething();于是调用
B.dosomething(); 在 B.dosomething();中的Bvar没有初始化,于是输出Bvar=0;
class A{
public int Avar;
public A() {
System.out.println("aaa");
dosomething();
}
public void dosomething(){
Avar=111;
System.out.println("a.do..");
}
}
public class B extends A {
public int Bvar=222; public B(){
System.out.println("Bvar2=" + Bvar);//output=0 ??
dosomething();
System.out.println("Avar=" + Avar);
}
public void dosomething(){
System.out.println("Bvar1="+Bvar);
}
public static void main(String [] args){
new B();
}
}你可以看到 输出为
aaa
Bvar1=0 \\A构造中的dosomething() 调用 B.dosomething()
Bvar2=222 \\ System.out.println("Bvar2=" + Bvar)
Bvar1=222 \\B构造中的dosomething()Avar=0