如何停止强制子 类 实现父构造函数

How to stop enforcing child classes to implement parent constructor

让我们考虑以下 class :

public abstract class Parent{
    
    protected Parent(Object object){
        
        /* ... */
        
    }
    
}

还有下一个:

public final class Child1 extends Parent{
    
    public Child1(Object object){
        
        super(object);
        
    }
    
}

是否有任何通用的方法来停止在 classes 扩展父 class 中强制执行调用 super(object) 的构造函数,以便始终调用父构造函数?

我想知道,因为我将有一堆 classes 扩展 Parent 并且它们都将共享相同的构造函数,没有特别的例外,所以我会节省时间(不是这么多,但我也只是好奇)。

A child class 总是 必须调用其 parent 的构造函数之一。

即使 parent class 中的 no-arg 构造函数也是如此:

class Parent {
  Parent() {}
}

class Child extends Parent {
  Child() {}
}

编译器将在 child 的构造函数中插入一个调用:

class Child extends Parent {
  Child() {
    super();
  }
}

如果 Parent class' 构造函数都需要参数,编译器不能假设它可以通过 Child 构造函数参数:

class Child extends Parent {
  Child(Object first, Object second) {
    super(???);  // Which of the parameters do you pass here?
  }
}

即使在只有一个 Child 构造函数参数的情况下,编译器也无法知道您是否真的想传递那个参数 as-is,或者您是否真的打算传递从它(甚至不是):

  Child(Object first) {
    super(first);
  }

  Child(Object first) {
    super(first + "");
  }

  Child(Object first) {
    super("Hello world");
    first.doThing();
  }

这些(以及更多)中的每一个都是同样有效的选择。

编译器不知道你想要什么,所以你必须明确地告诉它。对不起,没办法。