如何在抽象类中调用专门继承它的类的构造函数?像这样:
public abstract class AbstractClass {
public Abstract foo() {
//Когда метод foo вызовется наследником
AbstractClass a = new this(); //здесь надо вызвать конструктор наследника
a.bar(); //как-то меняем состояние, вызывая метод наследника
return a; //и возвращаем экземпляр наследника
}
public abstract void bar();
}
但是在这个例子中它给出了一个错误:
java: 从版本 8 开始,'this' 只允许作为接收者类型的参数名称,它必须是第一个参数
首先,在好的设计中,基类不应该知道它的后代的任何信息,否则违反了关于契约编程的 OOP 基础之一。
创建另一个抽象方法并在后代中覆盖它,以便它们返回其类型的新实例:
如果你还是不想触及继承人而走下坡路,那么你可以使用反射(但是,在这种情况下,所有继承人都必须有一个不带参数的构造函数):