Страницы

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

пятница, 1 марта 2019 г.

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

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


Ответ

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

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

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