Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么需要在java中创建默认构造函数?_Java - Fatal编程技术网

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

为什么需要在java中创建默认构造函数?,java,Java,当实例化单个类时未指定参数时,将使用默认构造函数,但对于子类和超类,我们需要创建默认构造函数!为什么? 注意:“默认构造函数”!=“零参数构造函数”。默认值(如果提供)是零参数构造函数,但如果显式编写零参数构造函数,则不是默认值 为什么需要在java中创建默认构造函数 它不是-这就是为什么它被称为默认构造函数。如果您没有为类编写任何构造函数,编译器就会提供它。默认构造函数不接受任何参数,如果类是子类,则调用超类上的零参数构造函数 这很好用(): 只有在以下情况下,才需要定义零参数构造函数: 您

当实例化单个类时未指定参数时,将使用默认构造函数,但对于子类和超类,我们需要创建默认构造函数!为什么?

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

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

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

这很好用():

只有在以下情况下,才需要定义零参数构造函数:

  • 您希望它具有与默认值不同的可访问性(默认情况下,它与类具有相同的可访问性)
  • 您可以定义任何其他构造函数,但也希望有一个零参数构造函数。这是因为编译器仅在未定义构造函数时提供默认值(因为您可能不需要零参数构造函数)

默认构造函数是在不定义其他构造函数的情况下自动生成的无参数构造函数

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

创建类A扩展类B时,如果未显式调用super(…),则会隐式调用默认super()(无参数)

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


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

这不是必需的,为什么您认为有必要?你可能想用代码来说明你的问题,这样我们就可以更好地理解发生了什么,然后向你解释。实际上我们不需要这样做。在实例化子类时,必须调用其中一个超类构造函数,因此如果该超类具有默认构造函数,则不必在该超类的子类中指定任何构造函数,因为不会自动调用任何参数构造函数。您可以举个例子吗?您可能想看看
class Base {
}
class Derived extends Base {
}
// ...
Derived d = new Derived();