#java #ооп
Вопрос задавался на собеседовании: "Возможно ли при переопределении метода изменить модификатор доступа?" При ответе, что изменить можно, но при условии его расширения (package private -> protected -> public) прозвучал встречный вопрос: "А почему так?" ??? Понятно, что если нарушить это условие, то будет ошибка на стадии компиляции. Возможно чтобы ответить на этот вопрос нужны более глубокие познания в ООП? Если у кого есть соображения...
Ответы
Ответ 1
Принцип подстановки Лисков. Там, где допустимо использовать тип Х, должно быть допустимо использовать и любой тип, наследующийся от него. Если гипотетически предположить, что вам всё-таки удастся это нарушить, то получится, что в коде, который требует значение некоего базового типа (и использует у него тот метод, который вы перекрыли более ограниченным) не всякий более конкретный тип можно использовать. Наследование получается неполным, и выходит, что система типов перестаёт контролировать, что наследующие типы применимы в коде для базового.
Комментариев нет:
Отправить комментарий