Подтвердить что ты не робот

Использование ключевого слова override при реализации абстрактных методов

Хорошо ли использовать ключевое слово override при реализации абстрактных методов, определенных в чертах?

trait Tooth {
  def ache(): Unit
}

class Molar extends Tooth {
  override def ache(): Unit = {}
}

В приведенном выше примере я понимаю, что ключевое слово override является необязательным; но целесообразно ли это? С какой стороны от отношения терпения и безопасности я должен упасть?

4b9b3361

Ответ 1

override делает для вас одну вещь: при удалении Tooth.ache, но не ее реализации позже, вы получите ошибки компилятора. В частности, это приводит к тому, что в некотором смысле функции Tooth (написанные вами или другими) должны быть "близки" к Tooth, а именно, что устаревшие методы исчезают (или, по крайней мере, пересматриваются).

Это может быть или не быть желательным.

Ответ 2

Лично, когда я вижу

override def whatever()

Первое, что я думаю: "Интересно, как это должно было вести себя раньше?"

Так как это бесполезная мысль, если она была абстрактным методом, я нахожу ее более кратким и более безопасным, чтобы ее не было.

Ответ 3

Я обычно не использую переопределение при реализации абстрактного метода. Это не так, но избыточно, и я предпочитаю держать свой код как можно короче, сохраняя при этом ясность. Но я понимаю, что это не ясный вопрос.

Ответ 4

Я всегда использую его, чтобы указать участника, которые были объявлены на суперклассах, даже если они абстрактны.