说我有一个父类和一个子类,并调用子类的构造函数。我是否必须同时拥有子构造函数参数和父构造函数参数,并使用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;
}
}
答案 0 :(得分:2)
始终调用父构造函数。如果不明确,它将是隐含的。由您来定义调用父构造函数的参数。
如果父级没有提供默认构造函数(不需要任何参数的构造函数),则需要从子类中显式调用它。
在child(int a, int b, int c, int d)
的情况下,没有任何条件禁止您拥有一个通用构造函数,并调用父类的构造函数lie super(a,b)
。
如果你在父类上有一些构造函数并不意味着你需要传播"传播"他们在子类。
关于链接here的构造函数有一个很好的文本。
答案 1 :(得分:0)
由您决定要编写多少超载版本的construtor,但请记住,如果在父级中没有arg construtor不在那里,那么子类的每个construtor都会调用它的super()而没有arg它会给你编译时错误。但是如果你明确地打电话,你可以打电话给任何一个建设者。