PMD CallSuperInConstructor 是什么原因?

What is the reason for PMD CallSuperInConstructor?

PMD 定义规则 CallSuperInConstructor。当编译器不需要时,在构造函数中添加对 super() 的无参数调用的目的是什么?

我意识到我可以禁用该规则或使用 @SuppressWarnings 使每个 class 中的规则静音。

This question 处理为什么应该在构造函数中调用 super(...)。我的问题是关于为什么在编译器不需要时添加无参数 super() 调用。

如果你的class

  • 有许多重载的构造函数
  • 正在扩展一个非Object class,它有许多重载的构造函数

然后当您显式调用 super() 时,它避免了调用 class/superclass 构造函数的混淆。

说明上述内容的示例:

class Foo {
    final int x;
    Foo(int x) {
        this.x = x;
    }
    Foo() {
        this.x = 1;
    }
}

class Bar extends Foo {
    Bar(int x) {
    }
}

问题 - new Bar(10).x 的值是多少?