一尘不染

Java构造函数继承

java

我想知道为什么在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);
  }

}

这段代码是重复的,而不是干的和无用的(IMHO)…因此再次带来了问题:

为什么Java不支持构造函数继承?不允许这种继承有什么好处?


阅读 404

收藏
2020-03-05

共1个答案

一尘不染

假设构造函数是继承的…则因为每个类最终都派生自Object,所以每个类最终都将带有无参数构造函数。那是个坏主意。你究竟期望什么:

FileInputStream stream = new FileInputStream();

去做?

现在可能应该有一种方法可以轻松地创建相当普遍的“直通”构造函数,但是我认为它不是默认设置。构造子类所需的参数通常与超类所需的参数不同。

2020-03-05