class Base {
public void draw()
{
System.out.println("base.draw");
}
Base()
{
draw();
System.out.println("base end");
}
}
public class Test extends Base
{
Test()
{
draw();
System.out.println("test end");
}
public void draw()
{
System.out.println("test.draw " );
}
public static void main(String[] args)
{
Test t1 = new Test();
}
}
=======执行结果==============================
F:\java\javaproj>java Test
test.draw
base end
test.draw
test end
=============================================
为什么父类构造函数中的draw()方法,调用了子类的draw()方法?
------解决方案--------------------
虚拟机在执行构造方法之前把子类的draw方法覆盖了父类的,如有需要就得特别指出
------解决方案--------------------
怎么说,引用编程思想一句话:如果要调用构造器内部的一个动态绑定方法(多态原理),就要用到那个方法的被覆盖后的定义,然而,这个调用的效果可能相当难以预料,……
总结起来就是他想怎么干是虚拟机的事,你在这虚拟机实现的在另外一个可能实现不一样,你只要做构造器该做的事,别做多余的动作。具体可参考编程思想多态一节