【问题标题】:When must an explicit call to super constructor be used?何时必须使用对超级构造函数的显式调用?
【发布时间】:2021-06-07 12:38:52
【问题描述】:

我正在学习 super() 构造函数,我遇到了这个语句:

由于继承的实例变量应该被初始化,并且基类构造函数就是为此而设计的,所以应该始终使用对super() 的显式调用。

这句话是什么意思?

如果基类没有定义无参数构造函数,隐式调用会导致错误除外?

【问题讨论】:

  • 简而言之,当您对隐式super(); 的默认选择(无参数构造函数)不满意时,您应该显式选择您想要的构造函数super(...);。如果你对这个选择感到满意,你可以让它保持隐含,就这么简单。

标签: java inheritance super


【解决方案1】:

我认为引用的段落有点误导,因为如果您对未参数化的隐式 super() 调用不满意,您只需要显式调用参数化 super()。

如果基类只有参数化的构造函数,您还必须进行参数化 super() 调用。

【讨论】:

    【解决方案2】:

    您引用的这句话并没有明确说明您的类中需要有 0 参数构造函数。这句话的重点是所有属于父类的变量都应该被初始化,并且你用构造函数初始化这些变量,因此你应该在你的子类构造函数中调用父类构造函数。父类构造函数的参数个数无关紧要。

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2020-09-29
      • 2014-11-06
      • 2023-04-08
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 2014-10-02
      • 2011-07-26
      相关资源
      最近更新 更多