Почему Вы не можете уменьшить видимость метода в подклассе Java?

Я пошел бы с изучением STL сначала.

, После того как Вы проходите основы с C++, учась, как использовать части STL и затем как он работает, будет лучше, чем занятие Повышением. Библиотеки Boost склонны продвигать края C++ особенно в комбинациях высоко шаблонных функций.

мне нравится Matt Austern Универсальное Программирование и STL, который Вы можете погрузка дешево подержанный .

42
задан Joachim Sauer 8 December 2013 в 15:31
поделиться

3 ответа

Потому что каждый экземпляр подкласса по-прежнему должен быть допустимым экземпляром базового класса (см. Принцип подстановки Лискова ).

Если подкласс внезапно потерял один свойство базового класса (например, общедоступный метод), то он больше не будет действительной заменой базового класса.

65
ответ дан 26 November 2019 в 23:41
поделиться

Потому что, если бы это было разрешено, была бы возможна следующая ситуация:

Класс Sub наследуется от класса Parent. У Parent есть открытый метод foo , Sub делает этот метод закрытым. Теперь следующий код компилируется нормально, потому что объявленным типом bar является Parent:

Parent bar = new Sub();
bar.foo();

Однако неясно, как это должно себя вести. Одна из возможностей - позволить этому вызвать ошибку времени выполнения. Другой вариант - просто разрешить это, что позволит вызывать частный метод извне, просто выполняя приведение к родительскому классу. Ни одна из этих альтернатив не приемлема, поэтому не допускается.

18
ответ дан 26 November 2019 в 23:41
поделиться

Потому что подтипы должны использоваться как экземпляры своего супертипа.

1
ответ дан 26 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: