Использование ключевого слова переопределения в реализациях абстрактных методов - PullRequest
24 голосов
/ 13 апреля 2011

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

trait Tooth {
  def ache(): Unit
}

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

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

Ответы [ 4 ]

27 голосов
/ 13 апреля 2011

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

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

15 голосов
/ 13 апреля 2011

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

override def whatever()

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

Поскольку это бесполезная мысль, если бы это был абстрактный метод, я считаю, что и более кратко , и более безопасно, если ее оставить.

12 голосов
/ 23 июля 2014

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

8 голосов
/ 13 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...