Java子类构造函数调用顺序
在Java中,当一个类继承自另一个类时,子类的构造函数会先调用父类的构造函数,然后再执行自己的构造函数。这是由Java的继承机制决定的。本文将介绍Java子类构造函数调用顺序,以及相关的代码示例。
类图
classDiagram
class Parent {
- name: String
+ Parent(name: String)
}
class Child extends Parent {
- age: int
+ Child(name: String, age: int)
}
Parent <|-- Child
上面的类图展示了一个父类Parent和子类Child之间的继承关系。Parent类有一个成员变量name,并且有一个带有参数的构造函数。Child类继承自Parent类,并新增了一个成员变量age,并且也有一个带有参数的构造函数。
代码示例
下面的代码示例展示了父类和子类的构造函数调用顺序:
public class Parent {
private String name;
public Parent(String name) {
this.name = name;
System.out.println("Parent constructor");
}
}
public class Child extends Parent {
private int age;
public Child(String name, int age) {
super(name);
this.age = age;
System.out.println("Child constructor");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child("Alice", 10);
}
}
运行上述代码,得到的输出结果是:
Parent constructor
Child constructor
代码中,Child类的构造函数调用了super(name),并传入了name参数。这里的super关键字表示调用父类的构造函数。在执行Child类的构造函数之前,会先调用父类Parent的构造函数。
构造函数调用顺序
在Java中,子类的构造函数调用父类的构造函数有几个特点:
- 子类的构造函数必须调用父类的构造函数,可以使用super关键字来实现。
- 如果子类的构造函数没有显式地调用父类的构造函数,编译器会自动插入一个默认的super()调用。
- 父类的构造函数在子类的构造函数之前被调用,这是因为子类继承了父类的属性和方法,需要先初始化父类的成员。
- 构造函数的调用顺序是从上到下,即从父类到子类。
总结
在Java中,子类的构造函数调用父类的构造函数的顺序是由上到下的,先调用父类的构造函数,然后再调用子类的构造函数。这是因为子类继承了父类的成员,需要先初始化父类的成员,然后再初始化子类的成员。
代码示例:
public class Parent {
private String name;
public Parent(String name) {
this.name = name;
System.out.println("Parent constructor");
}
}
public class Child extends Parent {
private int age;
public Child(String name, int age) {
super(name);
this.age = age;
System.out.println("Child constructor");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child("Alice", 10);
}
}
输出结果:
Parent constructor
Child constructor
以上是关于Java子类构造函数调用顺序的科普介绍,希望能帮助您更好地理解Java的继承机制。