在调用子类构造函数时,超类构造函数的初始化是如何工作的

时间:2012-06-16 00:44:06

标签: java

说我有一个父类和一个子类,并调用子类的构造函数。我是否必须同时拥有子构造函数参数和父构造函数参数,并使用super()初始化父级。这是否意味着如果我重载了父构造函数,我需要有构造函数匹配每个子构造函数...所以如果我有两个父构造函数

parent(int a);
parent(int a,int b);

和两个子构造函数

child(int c);
child(int c,int d);

我必须让child(int a)实际上是两个构造函数的形式

child(int a, int c) 
{
super(a)

c = this.c;
}

child ( int a, int b, int c)
{
super(a,b)

c = this.c;
 }

并且child(int c,int d)实际上有两个构造函数

child(int a, int c, int d)
{
super(a);

c = this.c;
d = this.d;
}

或者我可以通过

child(int a,int b, int c, int d)
{
super(a,b);

c = this.c;
d = this.d;
}

}

2 个答案:

答案 0 :(得分:2)

始终调用父构造函数。如果不明确,它将是隐含的。由您来定义调用父构造函数的参数。

如果父级没有提供默认构造函数(不需要任何参数的构造函数),则需要从子类中显式调用它。

child(int a, int b, int c, int d)的情况下,没有任何条件禁止您拥有一个通用构造函数,并调用父类的构造函数lie super(a,b)

如果你在父类上有一些构造函数并不意味着你需要传播"传播"他们在子类。

关于链接here的构造函数有一个很好的文本。

答案 1 :(得分:0)

由您决定要编写多少超载版本的construtor,但请记住,如果在父级中没有arg construtor不在那里,那么子类的每个construtor都会调用它的super()而没有arg它会给你编译时错误。但是如果你明确地打电话,你可以打电话给任何一个建设者。