Выбор ответа Middle Классы и интерфейсы обновлено

Флаг noImplicitOverride

Вопрос

В проекте включён noImplicitOverride. Что скажет компилятор?

class Repo {
  save() {}
}
class UserRepo extends Repo {
  save() {}
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Ошибка: save переопределяет метод базового класса без override. С noImplicitOverride каждый метод, который переопределяет метод родителя, обязан быть помечен override.

Варианты ответа

  1. Всё компилируется: флаг влияет только на абстрактные методы
  2. Ошибка: save переопределяет метод базового класса без overrideправильный ответ
  3. Ошибка: нельзя переопределять методы без вызова super.save()
  4. Ошибка: метод базового класса должен быть помечен abstract

Разбор

С noImplicitOverride каждый метод, который переопределяет метод родителя, обязан быть помечен override. Обратная защита тоже есть: override на методе, которого нет у родителя, даёт ошибку. Это ловит ситуацию, когда метод в базовом классе переименовали, а наследник молча перестал его переопределять.

Вызов super и abstract в базовом классе не требуются.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.