Использование ключевого слова override при реализации абстрактных методов
Хорошо ли использовать ключевое слово override
при реализации абстрактных методов, определенных в чертах?
trait Tooth {
def ache(): Unit
}
class Molar extends Tooth {
override def ache(): Unit = {}
}
В приведенном выше примере я понимаю, что ключевое слово override является необязательным; но целесообразно ли это? С какой стороны от отношения терпения и безопасности я должен упасть?
Ответы
Ответ 1
override
делает для вас одну вещь: при удалении Tooth.ache
, но не ее реализации позже, вы получите ошибки компилятора. В частности, это приводит к тому, что в некотором смысле функции Tooth
(написанные вами или другими) должны быть "близки" к Tooth
, а именно, что устаревшие методы исчезают (или, по крайней мере, пересматриваются).
Это может быть или не быть желательным.
Ответ 2
Лично, когда я вижу
override def whatever()
Первое, что я думаю: "Интересно, как это должно было вести себя раньше?"
Так как это бесполезная мысль, если она была абстрактным методом, я нахожу ее более кратким и более безопасным, чтобы ее не было.
Ответ 3
Я обычно не использую переопределение при реализации абстрактного метода. Это не так, но избыточно, и я предпочитаю держать свой код как можно короче, сохраняя при этом ясность. Но я понимаю, что это не ясный вопрос.
Ответ 4
Я всегда использую его, чтобы указать участника, которые были объявлены на суперклассах, даже если они абстрактны.