base b1=new base2();声明了一个形式类型是base实际类型是base2的对象
b1.a()就会调用base2这个类中的a()方法,因为没有覆写这个方法,就直接调用父类的方法
public void a()
{
System.out.println("base a()");
b();
}
里面这个b()会调用实际类型也就是base2中的b()方法,多态的表现

解决方案 »

  1.   

    因为b方法已经被重写了,而你新建实例的时候实际上是新建了一个base2的实例,只不过将它类型转换成为base类的对象了。
    所以在对象调用构造函数是base2的构造函数。
      

  2.   

    to  imA(阿梁) :这个好象跟构造函数没有什么关系吧!
    是多态,大家已经解释的很清楚了,我就不献丑了,呵呵!
      

  3.   

    base b1=new base2();这句话是说用一个父类的引用指向之类的对象,然而在子类base2重写了父类的b()方法,故当然是调用子类的b()方法!建议你看看中文版的thinking in java!现在出来了第三版的中文版了!