Java - 子类构造函数中的显式超级()

时间:2013-06-10 09:21:28

标签: java inheritance constructor superclass super

我发现了一些类似的主题,例如here,但他们并没有完全回答我的问题。问题很简单:

在子类'构造函数中调用super()是一个好习惯吗?我当然知道,如果我没有明确说明,编译器会为我做,但我只是在最佳实践的背景下问。您是否考虑在每个子类的构造函数中调用super()作为“形式胜过实质”的胜利?

我正在使用包含使用策略的代码,所以我看到,对于许多程序员来说它根本没关系......对我来说现在也没关系,但也许我应该改变它......

2 个答案:

答案 0 :(得分:3)

良好的做法?调用正确初始化对象所需的内容。

public class Foo {
    private String name;
    public Foo() { this(""); }
    public Foo(String n) { this.name = n; }
}

public class Bar extends Foo {
    private int x;
    public Bar(int y) { this("", y); }
    public Bar(String n, int y) {
        super(n);
        this.x = y;
    }
}

答案 1 :(得分:3)

在我看来,显式的super()调用只是污染代码。默认的super()调用是为此目的而发明的 - 缩短代码。查看SE库源,很少使用super(),例如

public HashMap(int initialCapacity, float loadFactor) {
   if (initialCapacity < 0)
   ...