Java子类构造方法中默认调用父类无参的super构造方法

public class BaseException extends RuntimeException
{
    private static final long serialVersionUID = 1L;

    /**
     * 所属模块
     */
    private String module;

    /**
     * 错误码
     */
    private String code;

    /**
     * 错误码对应的参数
     */
    private Object[] args;

    /**
     * 错误消息
     */
    private String defaultMessage;

    public BaseException(String module, String code, Object[] args, String defaultMessage)
    {
        this.module = module;
        this.code = code;
        this.args = args;
        this.defaultMessage = defaultMessage;
    }

    public BaseException(String module, String code, Object[] args)
    {
        this(module, code, args, null);
    }

    public BaseException(String module, String defaultMessage)
    {
        this(module, null, null, defaultMessage);
    }

    public BaseException(String code, Object[] args)
    {
        this(null, code, args, null);
    }

    public BaseException(String defaultMessage)
    {
        this(null, null, null, defaultMessage);
    }

    @Override
    public String getMessage()
    {
        String message = null;
        if (!StringUtils.isEmpty(code))
        {
            message = MessageUtils.message(code, args);
        }
        if (message == null)
        {
            message = defaultMessage;
        }
        return message;
    }

    public String getModule()
    {
        return module;
    }

    public String getCode()
    {
        return code;
    }

    public Object[] getArgs()
    {
        return args;
    }

    public String getDefaultMessage()
    {
        return defaultMessage;
    }
}

在 Java 中,如果一个类的构造方法没有显式调用父类的构造方法(即 `super()`),那么会默认调用父类的无参构造方法(如果存在)。如果父类没有无参构造方法,或者想要调用父类的有参构造方法,则必须在子类的构造方法中使用 `super(参数列表)` 明确调用父类的构造方法。

在你提供的例子中,`BaseException` 继承自 `RuntimeException`,而 `RuntimeException` 有一个无参构造方法,因此在 `BaseException` 的构造方法中没有显式调用 `super()` 或 `super(参数列表)` 是合法的。

如果 `RuntimeException` 没有无参构造方法,`BaseException` 的构造方法可以使用 `super(参数列表)` 来调用父类的有参构造方法,例如:

```java
public BaseException(String module, String code, Object[] args, String defaultMessage) {
    super(); // 调用父类的无参构造方法
    // 子类的其他初始化逻辑
}
```

或者如果 `RuntimeException` 有有参构造方法,可以根据需要调用具体的父类构造方法:

```java
public BaseException(String module, String code, Object[] args, String defaultMessage) {
    super("RuntimeException message"); // 调用父类的有参构造方法
    // 子类的其他初始化逻辑
}
```

总结来说,如果父类有无参构造方法且你不需要显式调用父类的有参构造方法,那么在子类的构造方法中不需要调用 `super()`。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值