Java类中的构造器是隐式static的,每个类都有一个默认构造器,在实例化类的对象时就要执行,并检查对象是否被正确的构造。那么当一个派生类甚至多层继承的类被实例化时,执行顺序是怎样的呢?
下面进行测试
测试代码
public class Test {
public static void main(String[] args) {
MaleShepherdDog maleShepherdDog = new MaleShepherdDog();
}
}
class Insect {
public Insect() {
System.out.println("Insect");
}
}
class Animal {
public Animal() {
System.out.println("Animal");
}
}
class Human {
public Human() {
System.out.println("Human");
}
}
class Plane {
public Plane() {
System.out.println("Plane");
}
}
class Dog extends Animal {
public Dog() {
System.out.println("Dog");
}
}
class ShepherdDog extends Dog {
public ShepherdDog() {
System.out.println("ShepherdDog");
}
}
// 实现第三重继承的子类作为测试
class MaleShepherdDog extends ShepherdDog {
// 实例化三个非继承关系的对象
private Insect insect = new Insect();
private Human human = new Human();
private Plane plane = new Plane();
// 构造方法
public MaleShepherdDog() {
System.out.println("MaleShepherdDog");
}
}
执行结果
Animal
Dog
ShepherdDog
Insect
Human
Plane
MaleShepherdDog
问题总结
- 调用基类构造器。从最顶层基类开始,依次向下。
- 按声明顺序调用类成员的初始化方法。
- 调用本类构造器。