如何解决Java 隐式 super() 调用递归
虽然由于我的经验不足,我没有错误或任何关于此事的代码,但在子类的构造函数中对 super()
的隐式调用让我感到困惑。
如果我正在调用一个孩子的构造函数,其父母也是一个孩子,等等,是否会有系列连续 super()
调用?如在,由于父构造函数也有一个对 super()
的隐式调用,会进行该调用吗?
如果是这样,能走多深/能走多深?
如果我一直困惑或问了一个明显的问题,我的导师没有提供令人满意的答案,我深表歉意。
解决方法
构造函数链
是否会有一系列连续的 super()
调用?
是的,这正是发生的事情。每次在 Java 中构造一个对象时,new Foo()
都会首先沿着完整继承树向上,并开始从上到下构造父对象。
所以如果你有这样的设置
class Chihuahua extends Dog { ... }
class Dog extends Animal { ... }
class Animal { ... }
并构造 Chihuahua
new Chihuahua()
Java 遵循继承链,按以下顺序调用父构造函数
- 对象
- 动物
- 狗
- 奇瓦瓦州
在构造一个对象之前,Java 首先必须构造它的父基。
Object
- 继承结束
如果是,那能走多深/能走多深?
它总是沿着完整的继承树向上。总是以 all-father-class Object
结尾。要么通过显式扩展它
class Foo extends Object { ... }
或者通过隐式扩展它,如果你不写任何东西
class Foo { ... }
Object
是一个特殊的类,它没有进一步的父类,并且标记了每个继承链的末端。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。