Выбор ответа Middle Классы и интерфейсы обновлено
Флаг noImplicitOverride
Вопрос
В проекте включён noImplicitOverride. Что скажет компилятор?
class Repo {
save() {}
}
class UserRepo extends Repo {
save() {}
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Ошибка: save переопределяет метод базового класса без override. С noImplicitOverride каждый метод, который переопределяет метод родителя, обязан быть помечен override.
Варианты ответа
- Всё компилируется: флаг влияет только на абстрактные методы
- Ошибка:
saveпереопределяет метод базового класса безoverrideправильный ответ - Ошибка: нельзя переопределять методы без вызова
super.save() - Ошибка: метод базового класса должен быть помечен
abstract
Разбор
С noImplicitOverride каждый метод, который переопределяет метод родителя, обязан быть помечен override. Обратная защита тоже есть: override на методе, которого нет у родителя, даёт ошибку. Это ловит ситуацию, когда метод в базовом классе переименовали, а наследник молча перестал его переопределять.
Вызов super и abstract в базовом классе не требуются.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.