Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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_Class_Super_Sup - Fatal编程技术网

Java 在这种情况下调用super的构造函数是多余的吗?

Java 在这种情况下调用super的构造函数是多余的吗?,java,class,super,sup,Java,Class,Super,Sup,我一直认为,当创建带有子类的对象时,我们需要显式地使用superarguments列表来调用超类的构造函数。但是我做了一个实验,发现即使不使用super,也会自动调用super类的构造函数。这是真的吗 如果这是真的,什么时候是超级冗余,什么时候不是 class Parent { public Parent() { System.out.println("Super Class"); } } class Child extends

我一直认为,当创建带有子类的对象时,我们需要显式地使用superarguments列表来调用超类的构造函数。但是我做了一个实验,发现即使不使用super,也会自动调用super类的构造函数。这是真的吗

如果这是真的,什么时候是超级冗余,什么时候不是

class Parent
{
    public Parent()
    {
        System.out.println("Super Class");
    }           

}

class Child extends Parent
{
    public Child()
    {
        super();   //Is this redundant?
        System.out.println("Sub Class");
    }   
}

public class TestClass
{
    public static void main(String[] args) 
    {
        new Child();
    }
}
输出与超级;儿童班:

Super Class
Sub Class
Super Class
Sub Class
输出无超调;儿童班:

Super Class
Sub Class
Super Class
Sub Class
默认情况下,super添加到所有子类中,因此不需要显式调用它

可以通过使用superargs调用超类的重载构造函数或使用thisargs调用同一类的重载构造函数来重写默认行为


假设super类没有参数构造函数,并且您已经创建了其他构造函数,在这种情况下,您必须显式调用superargs以解决编译时错误。

如有疑问,请始终咨询:

如果构造函数体不是以显式构造函数调用开始,并且所声明的构造函数不是原始类对象的一部分,则构造函数体隐式以超类构造函数调用开始;,对其直接超类的构造函数的调用,不带任何参数


super exist hidden即使您不调用也必须调用super构造函数,当您需要向其传递参数时,否则如果您不调用它,则会隐式调用不带参数的super。因此,当super类的构造函数中有参数时,我们显式调用?