Добавить в корзинуПозвонить
Найти в Дзене
DEBAGanov

Java 761. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как

761. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость? При наследовании, по умолчанию, методы, объявленные как private, не наследуются и не могут быть доступны в наследнике. При переопределении метода в наследнике, уровень доступа в наследнике не может быть более ограничен, чем в родителе. То есть, если родитель объявил метод с модификатором protected, то метод переопределенный в наследнике может иметь только protected или public уровень доступа. Таким образом, наследник не может увеличить уровень доступа метода, объявленного как private, но может изменить уровень доступа метода, объявленного как protected, на public при переопределении. Насколько я понимаю, при сокрытии метода в наследнике, это не относится к уровням доступа, так как сокрытие - это создание нового метода с тем же именем в наследнике. Таким образом,

761. Расширение модификаторов при наследовании, переопределении и сокрытии методов. Если у класса-родителя есть метод, объявленный как private, может ли наследник расширить его видимость? А если protected? А сузить видимость?

При наследовании, по умолчанию, методы, объявленные как private, не наследуются и не могут быть доступны в наследнике. При переопределении метода в наследнике, уровень доступа в наследнике не может быть более ограничен, чем в родителе. То есть, если родитель объявил метод с модификатором protected, то метод переопределенный в наследнике может иметь только protected или public уровень доступа.

Таким образом, наследник не может увеличить уровень доступа метода, объявленного как private, но может изменить уровень доступа метода, объявленного как protected, на public при переопределении.

Насколько я понимаю, при сокрытии метода в наследнике, это не относится к уровням доступа, так как сокрытие - это создание нового метода с тем же именем в наследнике. Таким образом, уровень доступа зависит только от модификатора доступа, указанного в сокрываемом методе, и может быть любым, включая private.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov