我发现了一些类似的主题,例如here,但他们并没有完全回答我的问题。问题很简单:
在子类'构造函数中调用super()
是一个好习惯吗?我当然知道,如果我没有明确说明,编译器会为我做,但我只是在最佳实践的背景下问。您是否考虑在每个子类的构造函数中调用super()
作为“形式胜过实质”的胜利?
我正在使用包含使用策略的代码,所以我看到,对于许多程序员来说它根本没关系......对我来说现在也没关系,但也许我应该改变它......
答案 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)
...