1.请写出下列Java代码的输出结果
package test;
public class FatherClass()
{ public FatherClass()
{ System.out.println("FatherClass Create");}
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{ System.out.println("ChildClass Create"); }
public static void main(String[] args)
{ FatherClass fc=new FatherClass();
ChildClass cc=new ChildClass(); }
}
输出结果:
package test;
public class FatherClass()
{ public FatherClass()
{ System.out.println("FatherClass Create");}
}
子类:
package test;
import test.FatherClass;
public class ChildClass extends FatherClass
{
public ChildClass()
{ System.out.println("ChildClass Create"); }
public static void main(String[] args)
{ FatherClass fc=new FatherClass();
ChildClass cc=new ChildClass(); }
}
输出结果:
输出结果应该为:
FatherClass Create
FatherClass Create
ChildClass Create
ChildClass Create难道有什么陷阱?没有吧
import test.FatherClass;
public class ChildClass extends FatherClass{
public ChildClass(){
super();//父类构造继承
System.out.println("ChildClass Create");
}
public static void main(String[] args){
FatherClass fc=new FatherClass();
ChildClass cc=new ChildClass()
}
}
这句不知道是你故意写错的还是怎么,修改后 结果是:
FatherClass Create
FatherClass Create
ChildClass Create
FatherClass Create
FatherClass Create
ChildClass Create这是一个继承问题为什么会这样?请看<JAVA编程思想>里面的解释:用于基础类的构建器肯定在一个衍生类的构建器中调用,而且逐渐向上链接,使每个基础类使用的构建器都能得到调用。之所以要这样做,是由于构建器负有一项特殊任务:检查对象是否得到了正确的构建。一个衍生类只能访问它自己的成员,不能访问基础类的成员(这些成员通常都具有private属性)。只有基础类的构建器在初始化自己的元素时才知道正确的方法以及拥有适当的权限。所以,必须令所有构建器都得到调用,否则整个对象的构建就可能不正确。那正是编译器为什么要强迫对衍生类的每个部分进行构建器调用的原因。在衍生类的构建器主体中,若我们没有明确指定对一个基础类构建器的调用,它就会“默默”地调用默认构建器。如果不存在默认构建器,编译器就会报告一个错误(若某个类没有构建器,编译器会自动组织一个默认构建器)。
FatherClass Create
FatherClass Create
ChildClass Create 但是我在eclipse里没办法调试编译不通过。
FatherClass Create
FatherClass Create
ChildClass Create
FatherClass Create
FatherClass Create
ChildClass Create
子类的构造函数里有没有super()都没有关系,在new子类的实例时都会先生成一个父类的实例的