gpt4 book ai didi

java: 为什么我必须在构造函数的第一行写 super()

转载 作者:行者123 更新时间:2023-12-01 16:36:06 25 4
gpt4 key购买 nike

Possible Duplicate:
Why does this() and super() have to be the first statement in a constructor?

我刚在学校学到这个,但老师不知道为什么。

我可以想到一些很好的理由,但我认为在某些情况下可以稍后在构造函数中完成初始化 - 例如,在使用母类中的变量之前。好的,变量应该从一开始就初始化,但这并不总是必要的。

我猜还有更多原因为什么必须将 super() 放在构造函数的第一行。

那么,当我继承一个类时,为什么必须在构造函数的第一行编写 super() 呢?

最佳答案

在开始处理自己的类之前,您所继承的类需要能够完成其构造。

如果不这样做,你可能会做很多“坏”事情,例如

  1. 在其构造函数运行之前,将this传递给其他地方的另一个使用基类的方法。这将打破很多假设

  2. 调用尚未正确“设置”的多态函数。除了类本身所做的任何事情之外,实现也可能使用构造函数调用来处理实现内部。

    在对象被构造之前访问它是不好的,就像炸鸡"is"鸡一样,你真的不想在炸鸡之前访问(吃)那只鸡。

  3. 访问基类的 protected/public 成员变量,基类试图保证这些变量始终会初始化为某种状态。

对于一个类来说,它的任何实例将始终处于某种给定状态是完全合理的。如果你有机会在调用构造函数之前做一些事情,那么就没有办法兑现这样的 promise 。本质上,如果它"is"的东西实际上还不是那个东西,那么“是-是”关系实际上就不会成立!

关于java: 为什么我必须在构造函数的第一行写 super(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com