为什么需要在Java中创建默认构造函数?

时间:2018-08-18 09:17:29

标签: java

实例化单个类时,如果未指定任何参数,则使用默认构造函数,但是对于子类和超类,我们必须创建默认构造函数!为什么?

2 个答案:

答案 0 :(得分:4)

注意:“默认构造函数”!=“零参数构造函数”。默认值(如果提供)是零参数构造函数,但是如果您明确编写零参数构造函数,则不是默认值。

  

为什么必须在Java中创建默认构造函数?

不是-这就是为什么它被称为 default 构造函数的原因。如果您没有为类编写任何构造函数,则编译器会提供它。默认构造函数不接受任何参数,并且如果您的类是子类,则在超类上调用零参数构造函数。

这很好用(GitHubGS's suggestion):

class Base {
}
class Derived extends Base {
}
// ...
Derived d = new Derived();

在以下情况下,您只需要定义零参数构造函数即可:

  • 您希望它具有与默认设置不同的可访问性(默认情况下,它具有与类相同的可访问性)。
  • 您定义了任何其他构造函数,但还希望拥有零参数的构造函数。这是因为仅当未定义构造函数时,编译器才提供默认值(因为您可能不希望使用零参数构造函数)。

答案 1 :(得分:1)

默认构造函数是不定义其他构造函数而自动生成的无参数构造函数。

但是,如果定义至少一个构造函数,则不会生成默认构造函数。因此,请勿将默认构造函数与构造函数无参数混淆。

创建类A扩展类B时,在A的构造函数内(默认或已定义),如果您未显式调用super(...),则会隐式调用默认的super()(无参数)

如果仅在类B中定义了带有参数的构造函数,则此super()-调用B的构造函数(无参数)-未定义->错误。

这就是为什么您认为必须拥有一个默认构造函数,且该子类没有参数的原因。