在实现traits中定义的抽象方法时,使用override
关键字是一种好习惯吗?
trait Tooth {
def ache(): Unit
}
class Molar extends Tooth {
override def ache(): Unit = {}
}
在上面的例子中,我理解override关键字是可选的;但这是可取的吗?我应该选择简洁与安全权衡的哪一方?
答案 0 :(得分:27)
override
在那里为你做了一件事:当删除Tooth.ache
而不是稍后的实现时,你会遇到编译器错误。特别是,这迫使Tooth
(由您自己或其他人编写)的实现在某种意义上与Tooth
“接近”,即被弃用的方法消失(或至少被重新考虑)。
这可能是也可能不是。
答案 1 :(得分:15)
就个人而言,当我看到
时override def whatever()
我认为的第一件事是,“我想知道以前应该如何表现?”
由于这是一个无用的想法,如果它是一个抽象的方法,我发现它更简洁和更安全,让它关闭。
答案 2 :(得分:12)
在实现抽象方法时,我通常不会使用override。它没有错,但多余,我更喜欢在保持清晰度的同时保持我的代码尽可能短。但我意识到这不是一个明确的案例。
答案 3 :(得分:8)
我总是使用它来表示在超类上声明的成员,即使是抽象的。