0

说我有一个父类和一个子类并调用子类的构造函数。我是否必须同时拥有子构造函数参数和父构造函数参数并使用 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;
}

}

4

2 回答 2

2

总是调用父构造函数。如果不是显式的,它将是隐式的。由您来定义参数以调用父构造函数。

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

正如您所评论的那样,没有什么可以禁止您使用通用构造函数,以防万一child(int a, int b, int c, int d)并调用父类的构造函数 lie super(a,b)

如果您在父类上有一些构造函数并不一定意味着您需要在子类上“传播”它们。

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

于 2012-06-16T00:52:28.387 回答
0

由您决定要编写多少个重载版本的构造函数,但请记住,如果父类中没有 arg 构造函数,子类的每个构造函数都会隐式调用其 super() 而没有 arg,它会给您编译时错误.但是如果你明确地打电话,你可以打电话给任何 supar construtor 。

于 2012-06-16T03:46:49.497 回答