class FatherClass
{
public FatherClass()
{
 m(); 
}void m()

System.out.println("FatherClass");
}
}
public class ChildClass extends FatherClass
{
public ChildClass()

m();
super.m();
}void m()

System.out.println("ChildClass");
}public static void main(String[] args)
{
FatherClass f = new ChildClass();
ChildClass c = new ChildClass();
}
}我认为的结果是
ChildClass
FatherClass
ChildClass
FatherClass
可执行结果却是
ChildClass
ChildClass
FatherClass
ChildClass
ChildClass
FatherClass
为什么前面偏偏多了个ChildClass

解决方案 »

  1.   

    你的问题很有意思
    过程是这样的
    new ChildClass();
    因为Child继承了Father(为了方便,省略Class);
    在newChild对象时;Child先要调用Father的构造器;
    Father构造器执行m方法;由于m方法被Child覆盖了。所以Father执行的是子类的m方法;打印第一行ChildClass
    接着Child调用自己的构造器。
    自己的构造器调用了自己的m方法;(该方法打印第二个ChildClass);又调用了Father的m方法(super.m())打印FatherClass多出的ChildClass是父类构造器调用被子类覆盖的方法打印出来的。
    不知到这样说,够明白没有
      

  2.   

    public ChildClass()
    { 执行:自动调用父类的无参构造方法
    输出:ChildClass执行:m();
    输出:ChildClass执行:super.m();
    输出:FatherClass}
      

  3.   

    因为 你new的时候执行了 构造方法的。
      

  4.   

    kan kan  ~~~~~~~~~~~~~~~~
      

  5.   


    好好debug一下。就知道了。。
      

  6.   

    根本是,new 子类的时候  先构造父类,,