1

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

super() 在子类的构造函数中调用是一个好习惯吗?我当然知道,如果我没有明确地做到这一点,编译器会为我做这件事,但我只是在最佳实践的背景下询问。您是否认为在每个子类的构造函数中调用super()是“形式战胜实质”?

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

4

2 回答 2

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;
    }
}
于 2013-06-10T09:25:24.077 回答
3

在我看来,明确的 super() 调用只会污染代码。默认 super() 调用正是为此目的而发明的 - 以缩短代码。参见 SE 库源代码,super() 几乎从未使用过,例如

public HashMap(int initialCapacity, float loadFactor) {
   if (initialCapacity < 0)
   ...
于 2013-06-10T09:30:16.813 回答