Order of Execution of Constructors in Java Inheritance

2025 年 5 月 10 日 | 阅读 3 分钟

Java 中的构造函数

Java 中的构造函数类似于方法,但有几处不同。构造函数与类名具有相同的名称。构造函数没有返回类型。

如果程序中未定义构造函数,Java 程序会自动创建一个构造函数。当创建类的实例时,它会被执行。

构造函数不能是 static、abstract、final 或 synchronized。它也不能被重写。

Java 有两种类型的构造函数

  1. 默认构造函数
  2. 参数化构造函数

Java 继承中构造函数的执行顺序是什么?

在 Java 程序中实现继承时,每个类都有自己的构造函数。因此,构造函数的执行在对象初始化之后开始。它遵循根据类层次结构确定的特定顺序。根据继承的类型,构造函数的执行顺序可能有所不同。

Java 中构造函数执行顺序的不同方式

1. 单继承中构造函数的执行顺序

在单级继承中,首先执行基类(父类)的构造函数。

OrderofExecution1.java

输出

Order of constructor execution...
ParentClass constructor executed.
ChildClass constructor executed.

在上面的代码中,在创建 ChildClass 的实例后,首先调用 ParentClass 构造函数,然后调用 ChildClass 构造函数。

2. 多重继承中构造函数的执行顺序

在多重继承中,当创建最底层子类的实例时,会调用所有上层类的构造函数。

OrderofExecution2.java

输出

Order of constructor execution in Multilevel inheritance...
College constructor executed
Department constructor executed
Student constructor executed

在上面的代码中,创建了一个 Student 类的实例,并相应地调用了 CollegeDepartmentStudent 的构造函数。

3. 使用 this 关键字调用同一类的构造函数

这里没有实现继承。但是,一个类可以有多个构造函数,并且可以使用 this 关键字访问这些构造函数。

OrderofExecution3.java

输出

Order of constructor execution...
Parameterized constructor executed.
Default constructor executed.

在上面的代码中,即使在创建对象时调用了默认构造函数,首先也会调用参数化构造函数。这是因为 this 关键字在默认构造函数的第一行使用。

4. 使用 super 关键字调用父类构造函数

子类的构造函数或方法可以使用 super 关键字访问基类(父类)的构造函数或方法。

OrderofExecution4.java

输出

Order of constructor execution...
Value of a : 79
Value of b : 89

在上面的代码中,ChildClass 使用 super 关键字调用 ParentClass 构造函数,这决定了构造函数的执行顺序。

在本文中,我们讨论了 Java 编程中的构造函数及其执行顺序。