实例化单个类时,如果未指定任何参数,则使用默认构造函数,但是对于子类和超类,我们必须创建默认构造函数!为什么?
答案 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的构造函数(无参数)-未定义->错误。
这就是为什么您认为必须拥有一个默认构造函数,且该子类没有参数的原因。