![]() |
1
61
将自动创建默认(无参数)构造函数 只有 当您自己没有定义任何构造函数时。 如果需要两个构造函数,一个带参数,一个不带参数,则需要手动定义这两个构造函数。 |
![]() |
2
18
虽然以上所有的答案都是正确的,但对于新来的人来说,想把这些都写进脑子里有点困难。我将为新来的人重新回答这个问题。
Ayush面临的问题是试图实例化
例如,让我们创建一个类
哇哈!但是当我们移除
这种异常现象背后的原因在于 当我们不定义任何参数时,为我们提供默认(无参数)构造函数 这个类的构造函数。
变成:
换句话说,当我们定义任何参数化构造函数的时候, 我们 必须 如果我们想实例化,也要定义一个无参数构造函数 通过无参数构造函数的该类的对象。 同样在继承的情况下,提供了一个没有构造函数的子类 默认构造函数。如上所述,Java提供的这个默认构造函数调用超类的no-arg构造函数。如果找不到,就会抛出一个错误。 因此,定义一个无参数/默认构造函数总是一个不错的选择。 |
![]() |
3
11
|
![]() |
4
2
这正是预期的行为。 Java自动为没有任何构造函数的类生成一个默认值(没有参数构造函数)。
|
![]() |
5
1
每当编译类时,若编译器在类中找不到任何有效的构造函数(默认值,参数化),则它将用自动生成的默认构造函数替换类。
但是,如果在类中定义参数化构造函数,则意味着要限制对象具有该参数
所以,在那个时候,编译器不会在那个里插入任何默认构造函数,因为在一个类。如果你也需要默认构造函数,你必须自己定义。 |
![]() |
6
1
当您必须定义无参数构造函数时,还有一个奇怪的情况。 正如另一位所写,如果您不指定默认构造函数,Java将为您做这件事。理解“defaultgeneratedbyjava”构造函数的样子是很好的。 实际上,它调用了超类的构造函数,这很好。 现在让我们想象一个例子。 您正在创建车辆类:
现在让我们创建从Vehicle类继承的Car类:
也许这看起来很奇怪,但它不能编译的唯一原因是Java不能为Car类创建默认构造函数,而Car类调用super Vehicle类。Vehicle类没有参数构造函数,并且当2参数构造函数已经存在时,它无法自动生成。
|
![]() |
Vincent · 空的默认构造函数和成员初始化 9 年前 |
![]() |
WileTheCoyot · 了解隐式声明的默认构造函数 11 年前 |
![]() |
user2975787 · Java构造函数看起来不像它应该的样子 11 年前 |
![]() |
Raj · 如何使构造函数同步? 11 年前 |