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
过程是这样的
new ChildClass();
因为Child继承了Father(为了方便,省略Class);
在newChild对象时;Child先要调用Father的构造器;
Father构造器执行m方法;由于m方法被Child覆盖了。所以Father执行的是子类的m方法;打印第一行ChildClass
接着Child调用自己的构造器。
自己的构造器调用了自己的m方法;(该方法打印第二个ChildClass);又调用了Father的m方法(super.m())打印FatherClass多出的ChildClass是父类构造器调用被子类覆盖的方法打印出来的。
不知到这样说,够明白没有
{ 执行:自动调用父类的无参构造方法
输出:ChildClass执行:m();
输出:ChildClass执行:super.m();
输出:FatherClass}
好好debug一下。就知道了。。