在抽象方法的实现上使用override关键字

Dav*_*vid 24 scala

override在实现traits中定义的抽象方法时使用关键字是一种好习惯吗?

trait Tooth {
  def ache(): Unit
}

class Molar extends Tooth {
  override def ache(): Unit = {}
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我理解override关键字是可选的; 但这是可取的吗?我应该选择简洁与安全权衡的哪一方面?

Rap*_*ael 27

override在那里为你做一件事:当删除Tooth.ache但稍后没有实现它时,你将得到编译器错误.特别是,这迫使Tooth(由你自己或其他人编写)的实现Tooth在某种意义上"接近" ,即被弃用的方法消失(或至少被重新考虑).

这可能是也可能不是.

  • OTOH,如果某人有一天在`Tooth`中放置一个'ache`的实现,旨在提供_the_最终的最终解决方案,他/她甚至不会知道代码中仍然会有旧的实现. (11认同)
  • 我同意这一点.我已经看到了很多死代码的例子,因为重命名了抽象方法. (3认同)

Rex*_*err 15

就个人而言,当我看到

override def whatever()
Run Code Online (Sandbox Code Playgroud)

我想的第一件事是,"我想知道这应该是怎么表现的?"

因为这是一个无用的想法,如果它是一个抽象的方法,我发现它更简洁,更安全,让它关闭.


Mar*_*sky 12

实现抽象方法时,我通常不使用override.这没有错,但多余,我更喜欢在保持清晰度的同时保持我的代码尽可能短.但我意识到这不是一个明确的案例.


Dan*_*ral 8

我总是用它来表示在超类上声明的成员,即使是抽象的.