我想知道为什么java中的构造函数不被继承?你知道什么时候你有这样的类(class):
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不支持构造函数继承?不允许这种继承有什么好处吗?
最佳答案
假设构造函数被继承...那么因为每个类最终都派生自Object,每个类最终都会有一个无参数的构造函数。这是个坏主意。你究竟会期待什么:
FileInputStream stream = new FileInputStream();
要做什么?
现在可能应该有一种方法可以轻松创建相当常见的“传递”构造函数,但我认为它不应该是默认值。构造子类所需的参数通常与父类(super class)所需的参数不同。
关于Java构造函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1644317/