我想知道为什么在Java中构造函数不能被继承?你知道当你有这样一个类:
public class Super {
public Super(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
this.serviceA = serviceA;
//etc
}
}
稍后当你从Super
继承时,Java会报告没有定义默认构造函数。解决方案显然是这样的:
public class Son extends Super{
public Son(ServiceA serviceA, ServiceB serviceB, ServiceC serviceC){
super(serviceA,serviceB,serviceC);
}
}
这段代码重复冗余,不符合DRY原则,而且(在我看来)没有用处... 这就引出了一个问题:
为什么Java不支持构造函数继承?禁止此继承是否有任何好处?
Son
类中的构造函数显得有些重复。正因为如此,C++现在允许派生类继承基类的构造函数(请参见http://www2.research.att.com/~bs/C++0xFAQ.html#inheriting)。请注意,我强调“允许”,因为派生类必须明确声明它使用了基类的构造函数。 - Derek MaharSuper
中有一个private final int foo;
,则无法在继承的构造函数Son
中为foo赋值,因为它在Super
中是私有的。 - Grim