这在java中是不可能的。唯一可能的解决方案是超级构造函数中的新调用。
如果 foo 对象可以在实例之间共享,您可以将其声明为静态
public class Bar extends AbstractBar{
private static final Foo foo = new Foo(bar);
public Bar(){
super(foo);
}
}
如果超类在您的控制之下,您可以重构它并使用模板方法模式将对象拉入构造函数,而不是从子类中提取它。这适用于好莱坞原则:不要打电话给我们,我们会打电话给你;)
public abstract class AbstractBar{
private Object thing;
public AbstractBar(){
this.thing = this.createThatThing();
}
protected abstract Object createThatThing();
}
public class Bar extends AbstractBar {
// no constructor needed
protected Object createThatThing(){
return new Thing();
}
}