Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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 对没有构造函数的类调用super()_Java_Inheritance - Fatal编程技术网

Java 对没有构造函数的类调用super()

Java 对没有构造函数的类调用super(),java,inheritance,Java,Inheritance,我刚刚注意到,在我工作时分配给我的一个非常大的项目的代码库中,一个特定的类没有构造函数。不过,它的子类调用了super() 有人能解释一下当一个子类调用super(),但父类中没有构造函数时会发生什么吗 (我可以猜其效果类似于调用一个空构造函数,但我想知道在幕后是否还有其他事情发生)。当一个类没有声明任何构造函数时,java编译器将提供一个没有主体的默认无参数构造函数。在基类构造函数中调用super()将调用该默认构造函数。如果您没有任何参数化构造函数,我严格地说没有构造函数,那么java将为您

我刚刚注意到,在我工作时分配给我的一个非常大的项目的代码库中,一个特定的类没有构造函数。不过,它的子类调用了
super()

有人能解释一下当一个子类调用
super()
,但父类中没有构造函数时会发生什么吗


(我可以猜其效果类似于调用一个空构造函数,但我想知道在幕后是否还有其他事情发生)。

当一个类没有声明任何构造函数时,java编译器将提供一个没有主体的默认无参数构造函数。在基类构造函数中调用
super()
将调用该默认构造函数。

如果您没有任何参数化构造函数,我严格地说没有构造函数,那么java将为您添加默认构造函数(没有参数的构造函数)

每个构造函数必须调用其超类的构造函数。在调用继承树上所有超类的构造函数之前,不能在子类构造函数中执行任何其他操作。因此,如果您不提供子类构造函数,那么这个调用必须是子类构造函数的第1行,java会为您这样做

提及

有人能解释一下子类调用时发生了什么吗 super(),但父级中没有构造函数


如果父类没有任何构造函数,那么java编译器将调用它的默认构造函数。如果您不想调用默认构造函数,那么您可以在该类中创建自己的空构造函数。

如果一个类没有任何构造函数,则表示java编译器赋予它空构造函数

如果将空构造函数放置为,则编译器将不会,因为您已经提到了它

现在,如果您希望自己的构造函数具有自己的参数,那么java编译器将不会有任何默认构造函数


在执行任何语句之前,子类构造函数总是首先调用其父类构造函数。如果父类中没有constructor,那么无论您是否显式调用它,super()调用都将由java编译器添加到代码中,因此将由JVM执行。

如果您不显式提供,编译器将在类中添加一个没有参数的默认构造函数。因此,在您的情况下,它正在调用默认构造函数。

默认构造函数不是空的吗?是的,它是。。但如果你想确定的话。第二段=启发性的。令人惊讶的是,以前没有人问过这样的问题。我认为这是一个很好的问题,一旦最终确定,应该锁定以供将来参考。