记住继承类的初值化的次序:
1。进入基类CONSTRUCTOR,初值化基类变量:
  进入A的CONSTRUCTOR,Avar = 0;2。执行基类CONSTRUCTOR的BODY:
   System.out.println("AAA"); ==> 输出   AAA
   dosomething(); ==> 调用 B::dosomething(),继承类变量还没有初值化,确省值是0
                  ==>输出   Bvar=03。初值化继承类变量
   Bvar = 2222
  
4。执行继承类CONSTRUCTOR的BODY
    System.out.println("BBB");  ==> 输出BBB
    dosomething();  调用 B::dosomething(),继承类变量已经初值化,Bvar = 2222
                  ==>输出   Bvar=2222
    System.out.println("Avar="+Avar);
                   ==>输出   Avar=0

解决方案 »

  1.   

    你在main方法中实例化了order2,而order2继承了A类,A类的构造函数中先输出AAA然后调用了dosomething方法,但dosomething方法在order2类中被覆盖了,所以实际调用的是order2的dosomething方法,这时bvar是0,然后order2开始调用构造函数进行初始化,给bvar=2222,输出BBB调用dosomething()输出bvar=2222然后再输出avar,由于A类的dosomething()被order2覆盖,所以avar=0.不知道各位是否认同?不对之处还请其他大侠指教