Java 隐式 super() 调用递归

Cre*_*sht 1 java constructor super

虽然由于我的经验不足,我没有错误或任何关于此事的代码,但super()在子类的构造函数中隐式调用 使我感到困惑。

如果我调用一个孩子的构造函数,他的父母也是一个孩子等等,会不会有一系列连续的 super()调用?就像在,因为父构造函数也有一个隐式调用,super()该调用会被进行吗?

如果是这样,那能走多深/多深?

如果我一直困惑或问了一个明显的问题,我的导师没有提供令人满意的答案,我深表歉意。

Zab*_*uza 5

构造函数链

会有一系列连续的super()调用吗?

是的,这正是发生的事情。每次在 Java 中构造一个对象时new Foo(),它都会首先沿着完整的继承树向上并开始从上到下构造父对象

所以如果你有这样的设置

class Chihuahua extends Dog { ... }
class Dog extends Animal { ... }
class Animal { ... }
Run Code Online (Sandbox Code Playgroud)

并构造一个实例 Chihuahua

new Chihuahua()
Run Code Online (Sandbox Code Playgroud)

Java顺着继承链,按如下顺序调用父构造函数

  1. 目的
  2. 动物
  3. 吉娃娃

在构造一个对象之前,Java 首先必须构造它的父 base


Object - 继承的结束

如果是这样,那能走多深/能走多深?

它总是沿着完整的继承树上升。这总是以全父级结束 Object。要么通过显式扩展它

class Foo extends Object { ... }
Run Code Online (Sandbox Code Playgroud)

或者通过隐式扩展它,如果你不写任何东西

class Foo { ... }
Run Code Online (Sandbox Code Playgroud)

Object 是一个特殊的类,它没有更多的父类,并且标志着每个继承链的结束。