在构造函数重载的情况下,如何同时调用 super(...) 和 this(...)?

2022-09-03 12:38:36

我以前从未需要这样做,但是由于两者都必须是构造函数中的“第一”行,因此应该如何处理它?对于这种情况,最好的重构是什么?

下面是一个示例:

public class Agreement extends Postable {


public Agreement(User user, Data dataCovered)
{
    super(user);
    this(user,dataCovered,null);

}

public Agreement(User user,Data dataCovered, Price price)
{
    super(user);

    if(price!=null)
        this.price = price;

    this.dataCovered = dataCovered;


}
   ...
}

调用是绝对必须的。在这种情况下如何处理“可选参数”?我能想到的唯一方法是重复,即根本不叫这个(...)。只需在每个构造函数中执行赋值。super(user)


答案 1

你不能同时调用 super(..) 和 this(...)。您可以做的是重新处理重载构造函数的结构,以便最后一个要调用的构造函数将调用 super(...)。如果这不是一个选项,则必须在每个构造函数中执行赋值。


答案 2

如果调用 ,将调用第二个构造函数,它将要做的第一件事就是调用超构造函数。因此,第一个构造函数中的行是不必要的。this(user,dataCovered,null)super(user);