package testother;public class SubDynamicStatus extends DynamicStatus
{ public SubDynamicStatus()
{
System.out.println("执行子类构造方法");
add();
}
public static void main(String[] args)
{
new SubDynamicStatus();
}
public void add()
{
System.out.println("执行子类Add()方法");
System.out.println("SubDynamicStatus.add()");
}
}
class DynamicStatus
{
public DynamicStatus()
{
System.out.println("执行父类构造方法");
add();
}
public void add()
{
System.out.println("执行父类Add()方法");
System.out.println("DynamicStatus.add()");
}
}为什么会有这样的执行顺序???DynamicStatus.add()  输出了两次  请高手赐教,谢了···

解决方案 »

  1.   

    关键在于构造方法中调用的add(),默认的,会在方法前加上this.add();
    其实子类的构造方法是这样的
    public SubDynamicStatus()
        {
            System.out.println("执行父类构造方法");
            this.add();
            System.out.println("执行子类构造方法");
            this.add();
        }
      

  2.   

    应该是输出SubDynamicStatus.add() 两次吧!
    你的add()方法已经覆盖了,实现了多态。而且你new的是SubDynamicStatus的对象,根据动态绑定,你调用的方法应该是你所构造对象拥有的实际方法(就是你在子类中所覆盖的那个方法),而不再是你父类的那个add()了。在你调用父类构造函数的时候并没有构造其对象。所以并不会调用父类中的 add()方法。