在派生类中重新声明父类的方法(即使它不重写它)是否是一个好习惯?

Bro*_*697 0 javascript oop

假设我在抽象/父类中定义了方法的实现,然后创建了一个预计使用此方法的派生类。如果派生类不重写方法的实现,为了让阅读代码的人清楚起见,仍然定义它并调用 super 是一个好习惯吗?

class Foo{
    speak() { console.log('Hi') }
}

class Bar extends Foo {
  // Should I include this? :
  speak(){
         super.speak()
  }
}
Run Code Online (Sandbox Code Playgroud)

这样做的唯一好处是可读性和断言 aBar是预期的speak(),但它也是多余的,因为它在实现方面没有添加任何内容。所以我想知道声明派生类时的最佳实践是什么?

T.J*_*der 5

这样做是没有意义的,extends Foo很明显,这Bar可能会继承 的功能Foo,而且它引入了维护危险:

\n
    \n
  • 假设您决定speak应该返回一个值并进行Foo相应的编辑?thenBar.speak是错误的,因为它不返回调用的结果super.speak()
  • \n
  • 假设您添加一个方法到Foo? 现在,如果你要遵循在子类中重新定义它的规则,你必须找到每个子类来添加一个新方法\xc2\xa0\xe2\x80\x94,不可避免地会缺少一些。
  • \n
\n

还有效率问题:您无缘无故地在调用堆栈中引入了另一层。

\n

虽然在这些事情上经常有意见的余地,但我认为对此的共识普遍的:除非您需要自定义方法的行为,否则不要重写方法。

\n