子类继承父类,代码执行顺序的介绍
今天看到一道面试题:
父类:
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
这道题考察的是关于子类继承父类代码执行顺序的问题
首先,创建一个对象,就要调用其构造方法,来初始化成员函数和成员变量。子类拥有父类的成员变量和成员方法,所以子类必须调用父类的构造方法,否则从父类继承过来的成员变量和成员方法得不到正确的初始化。子类对象在创建时默认调用父类的无参数的构造方法,此调用子类不必显式写出来,但是如果父类中没有无参的构造方法,则必须在子类的构造方法中的第一句调用父类有参的构造方法 ,并且要把参数传递给父类的构造方法。
如:
父类:
public class Father { public Father(int i) { System.out.println("有参数的:FatherClass Create"); } }
*父类中没有提供无参构造方法
子类:
public class Child extends Father { public Child() { super(5);//这里必须是子类构造方法的第一行,否则编译报错 System.out.println("ChildClass Create"); } public static void main(String[] args) { Father fc = new Father(2); Child cc = new Child(); } }
这时输出:
有参数的:FatherClass Create
有参数的:FatherClass Create
ChildClass Create