我发现了一些类似的主题,例如这里,但他们并没有完全回答我的问题。问题很简单:
super()
在子类的构造函数中调用是一个好习惯吗?我当然知道,如果我没有明确地做到这一点,编译器会为我做这件事,但我只是在最佳实践的背景下询问。您是否认为在每个子类的构造函数中调用super()
是“形式战胜实质”?
我正在使用包含使用策略的代码,所以我看到,对于许多程序员来说,这根本不重要......对我来说现在也没关系,但也许我应该改变它......
我发现了一些类似的主题,例如这里,但他们并没有完全回答我的问题。问题很简单:
super()
在子类的构造函数中调用是一个好习惯吗?我当然知道,如果我没有明确地做到这一点,编译器会为我做这件事,但我只是在最佳实践的背景下询问。您是否认为在每个子类的构造函数中调用super()
是“形式战胜实质”?
我正在使用包含使用策略的代码,所以我看到,对于许多程序员来说,这根本不重要......对我来说现在也没关系,但也许我应该改变它......
好习惯?调用正确初始化对象所需的内容。
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;
}
}
在我看来,明确的 super() 调用只会污染代码。默认 super() 调用正是为此目的而发明的 - 以缩短代码。参见 SE 库源代码,super() 几乎从未使用过,例如
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
...