Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > наследование


Автор: redwhite90 5.1.2013, 23:34
Можно ли при наследовании менять спецификатор доступа override метода 
допустим у базового public, а у наследника private

Автор: _Y_ 6.1.2013, 11:20
Если не ошибаюсь, можно увеличивать доступность метода, но нельзя уменьшать. Так, например, нельзя в классе потомке объявлять метод private если в родителе он был public. 

Это ИМХО обусловлено тем, что вызов такого метода из внешнего кода вызвал бы идиотскую ситуацию  в потомке вроде-бы запрещено, но в родителе-то можно, так может обратиться сразу к родителю?.... в-общем-полная-фигня-лучше-сразу-за пивом

Автор: kemiisto 6.1.2013, 11:45
Цитата(_Y_ @  6.1.2013,  10:20 Найти цитируемый пост)
Если не ошибаюсь, можно увеличивать доступность метода, но нельзя уменьшать. Так, например, нельзя в классе потомке объявлять метод private если в родителе он был public. 

Усё верно.

Цитата(_Y_ @  6.1.2013,  10:20 Найти цитируемый пост)
Это ИМХО обусловлено тем, что вызов такого метода из внешнего кода вызвал бы идиотскую ситуацию  в потомке вроде-бы запрещено, но в родителе-то можно, так может обратиться сразу к родителю?.... в-общем-полная-фигня-лучше-сразу-за пивом 

Или коротко - см. Liskov substitution principle.

Добавлено через 1 минуту и 48 секунд
А, ну и вывод - с архитектуркой у Вас что-то не так, уважаемый. smile 

Автор: redwhite90 6.1.2013, 14:16
Спасибо. Просто либо этому нигде особого внимание не уделяется, либо я упускал всегда.

Автор: _Y_ 7.1.2013, 12:33
Цитата(kemiisto @  6.1.2013,  11:45 Найти цитируемый пост)
ну и вывод - с архитектуркой у Вас что-то не так, уважаемый

Честно говоря, не понял коммента? Разве не рушилась бы логика, если бы можно было уменьшать доступность метода в потомке?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)