Java构造函数继承

标签 java inheritance constructor

我想知道为什么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/

相关文章:

c++ - 构造函数初始化列表顺序/分配问题

java - 流减少内部元素

java - 过滤所有查询的数据

java - Eclipse - 在 IResourceChangeEvent 中更改资源

python - Python 中的访问器是否合理?

C++ 期望构造函数、析构函数或类型转换在 '(' 标记之前

python - 从类构造函数 [Python/Traits] 中更改属性参数

java - 链接 HashMap 按值查找键?

c# - 如何将父类引用的子类更改为具有子类的引用类型?

java - 重写父类(super class)非抽象方法。访问父类(super class)中的私有(private)属性(?)