【发布时间】:2010-12-11 06:53:45
【问题描述】:
我想知道为什么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);
}
}
这段代码是重复的,不是干的和无用的(恕我直言)......所以又带来了问题:
为什么java不支持构造函数继承?不允许这种继承有什么好处吗?
【问题讨论】:
-
我同意
Son中的构造函数是重复的。正是出于这个原因,C++ 现在允许 派生类继承基构造函数(参见www2.research.att.com/~bs/C++0xFAQ.html#inheriting)。请注意,我强调“允许”,因为派生类必须明确声明它使用基类中的构造函数。 -
与 C++ 一样,Java 也会受益于允许构造函数继承的语法。
-
如果你在超类
Super中有一个private final int foo;,你不能在Son的继承构造函数中为foo赋值,因为它在Super中是私有的。
标签: java inheritance constructor