Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Изменение модификатора доступа при переопределении

#java #ооп


Вопрос задавался на собеседовании:
"Возможно ли при переопределении метода изменить модификатор доступа?"
При ответе, что изменить можно, но при условии его расширения (package private ->
protected -> public) прозвучал встречный вопрос: "А почему так?"
???
Понятно, что если нарушить это условие, то будет ошибка на стадии компиляции. Возможно
чтобы ответить на этот вопрос нужны более глубокие познания в ООП? Если у кого есть
соображения...
    


Ответы

Ответ 1



Принцип подстановки Лисков. Там, где допустимо использовать тип Х, должно быть допустимо использовать и любой тип, наследующийся от него. Если гипотетически предположить, что вам всё-таки удастся это нарушить, то получится, что в коде, который требует значение некоего базового типа (и использует у него тот метод, который вы перекрыли более ограниченным) не всякий более конкретный тип можно использовать. Наследование получается неполным, и выходит, что система типов перестаёт контролировать, что наследующие типы применимы в коде для базового.

Комментариев нет:

Отправить комментарий