public B() 的时间 先做的是super();super() 中 
 public A(){
 System.out.println("aaa");
 dosomething();
 }先输出aaa 而后 dosomething(); 而又由于在 B中 覆写了 dosomething();于是调用
B.dosomething(); 在 B.dosomething();中的Bvar没有初始化,于是输出Bvar=0;

解决方案 »

  1.   

    以下是我修改以后可以正常运行的代码,
    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