如果重载构造函数,如何调用super(...)和this(...)?

PhD*_*PhD 12 java constructor superclass

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

这是一个示例:

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;


}
   ...
}
Run Code Online (Sandbox Code Playgroud)

呼吁super(user)是绝对必须的.在这种情况下如何处理"可选参数"?我能想到的唯一方法就是重复,即根本不要称之为(...).只需在每个构造函数中执行赋值.

S.L*_*ica 14

你不能同时调用super(..)和this(...).你可以做的是重新设计你的overloadeded构造函数的结构,这样最后一个被调用的将调用super(...).如果这不是一个选项,您将必须在每个构造函数中进行分配.


JB *_*zet 6

如果你调用this(user,dataCovered,null),第二个构造函数将被调用,它将要做的第一件事是调用超级构造函数.所以super(user);第一个构造函数中的行是不必要的.