在不扩展任何内容的类中调用super()是不好的做法吗?

我经常看到人们在一个没有显式扩展任何东西的类中显式调用super()

 public class Foo { public Foo() { super(); //do other constructor stuff } } 

现在我知道这是完全合法的,如果省略,编译器会添加调用,但我仍然认为这是不好的做法。 每当我看到这个,我想知道程序员是否对inheritance有误解,并且所有类都隐式扩展了Object

我应该将它添加到我们的编码标准/最佳实践中吗?当我看到他们这样做时,我是否应该拉开团队中的其他开发人员? 它是我个人的错误熊,但我不知道我是否只是挑剔。

虽然我是一个坚持一致性的人,但我也反对微观管理每一种风格。 拥有大量编码约定,特别是当其中一些似乎是任意的时,是阻止人们关注它们的一部分。 我认为编码指南应该简化为最有价值的实践,以提高能力。 通过强制实施这一做法,可读性,可维护性,性能等提高了多少?

虽然我个人的做法是在这种情况下不要调用super() ,但它不够严重,我会将其包含在编码指南中,或称其为审查其他程序员代码时的缺陷。 然而,我仍会提及它并在代码评论中讨论它(不是缺陷,只是作为一种风格问题),试图游说更多的工程师使用这个电话。

添加不需要的代码总是不好的做法。 它将使代码的可读性降低,因为您需要停止并开始想知道为什么添加这行代码以及实际上是否有原因。

它将隐式调用,因此无需执行此操作

需要指出的是:

  • 无论类是否inheritance任何内容,调用super()都是毫无意义的; 只有在不调用基类的隐式构造函数时才有意义
  • 问题应该是“做一些完全毫无意义的不良做法吗?” 。 答案很明显 – 是的!

默认情况下,显式超级构造函数调用通常由自动代码生成器添加,所以它并不总是与程序员的不良做法有关。 或者也许不好的做法就是无疑地留下愚蠢的生成代码。

Eclipse尤其会生成这个超级调用(从超类生成构造函数),但是,我对其他IDE没有太多经验。 (在评论中写下你的经验。)我的另一个“最喜欢的”默认生成代码是接口的方法声明:’public abstract’,这是完全冗余的。

jDeveloper隐式添加了super()调用。 在编写自己的类时,没有必要和有用的这样做。