Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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_Inheritance_Constructor - Fatal编程技术网

java-在派生构造函数中调用超级构造函数是否与设置字段值完全相同?

java-在派生构造函数中调用超级构造函数是否与设置字段值完全相同?,java,inheritance,constructor,Java,Inheritance,Constructor,在java中定义派生类的构造函数有两种方法 在DerivedClassWithSuper中,我使用super函数定义构造函数。 但是,在DerivedClassWithoutSuper中,我不使用超级函数来定义构造函数 我想知道的一件事是,它们之间有什么区别吗 我也知道DerivedClassWithSuper的代码看起来更好,但我不确定当我像在DerivedClassWithoutSuper中那样定义构造函数时是否有任何副作用 类基类{ int-id; 基类{ 此参数为0.id; 已创建Sys

在java中定义派生类的构造函数有两种方法

在DerivedClassWithSuper中,我使用super函数定义构造函数。 但是,在DerivedClassWithoutSuper中,我不使用超级函数来定义构造函数

我想知道的一件事是,它们之间有什么区别吗

我也知道DerivedClassWithSuper的代码看起来更好,但我不确定当我像在DerivedClassWithoutSuper中那样定义构造函数时是否有任何副作用

类基类{ int-id; 基类{ 此参数为0.id; 已创建System.out.printfBase类,id:%d\n,this.id; } } 类DerivedClassWithSuper扩展了基类{ 字符串名; 嘲笑{ 超级的 //此参数为0.id; this.name=未知; 已创建System.out.printfDerivedClassWithSuper,this.id:%d,name:%s\n,this.id,this.name; } } 类派生类WithoutSuper扩展了基类{ 字符串名; 没有超级的派生类{ 此参数为0.id; this.name=未知; 已创建System.out.printfDerivedClassWithoutSuper,id:%d,名称:%s\n,this.id,this.name; } } 我一直感谢你的帮助。谢谢

其他问题: 若并没有超级函数,派生类调用超级隐式

在下面的代码中稍作修改,在DerivedClassWithoutSuper构造函数中,将this.id设置为10,并隐式调用super函数。如果调用super,则应将this.id或super.id设置为0

但是,super.id和this.id是10

我不明白为什么会这样

类基类{ int-id; 基类{ 此参数为0.id; 已创建System.out.printfBase类,id:%d\n,this.id; } } 类DerivedClassWithSuper扩展了基类{ 字符串名; 嘲笑{ 超级的 this.name=未知; 创建System.out.printfDerivedClassWithSuper; System.out.printf%d%d\n,this.id,super.id; } } 类派生类WithoutSuper扩展了基类{ 字符串名; 没有超级的派生类{ //如果超级隐式调用? 这个id=10; this.name=未知; 已创建System.out.printfDerivedClassWithoutSuper\n; //那么这个.id和super.id应该是不同的。 //但是,这两个都是这个构造函数中设置的10。 System.out.printf%d%d\n,this.id,super.id; } }
如果子类构造函数不调用super。。。或者这个。。。显式地,编译器将隐式地为您调用no-arg超级构造函数。如果不存在这样的构造函数,编译将失败,即使您从未编写过调用

例如,见:

注意:如果构造函数没有显式调用超类构造函数,Java编译器会自动插入对该超类的无参数构造函数的调用。如果超类没有无参数构造函数,则会出现编译时错误。对象确实有这样的构造函数,所以如果对象是唯一的超类,就没有问题了


超级的还是这个?这和超级不一样。。。!即使你有这个。。。你会出错的@塔什基西我从来没有说过这个。。。与超级…,但除对象构造函数外的所有构造函数都必须显式或隐式调用另一个构造函数。你可以称之为。。。或者你可以叫超级。。。或者你可以让编译器隐式调用super。我明白你的意思了。谢谢你的帮助。我补充一个问题。我真的很感激你的帮助help@frhyme不要在问题中添加更多的问题。每个问题只有一个问题,因此创建一个新问题。super不“定义构造函数”。它调用父构造函数。不清楚你在问什么。1 this.id=0;是冗余的,因为数字字段默认为0。-2是的,如果未进行显式调用,则在构造函数的开头隐式调用super。-3 id,this.id和super.id都引用基类的唯一id字段。-4为什么在分配该值后,id不为10?