Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java - программирование. Сравнение между двумя кодами, необходимо понять логику.

Дмитрий Павелко Ученик (106), на голосовании 2 месяца назад
Добрый день! Никак не могу понять логику двух кодов. Почему Код слева возвращает "человек" "студент", а код справа - "человек" "человек".
Дополнен 3 месяца назад
Дополнен 3 месяца назад
Голосование за лучший ответ
Андрей Панарин Искусственный Интеллект (249094) 3 месяца назад
Метод getInfo в классах Person и Student имеет одну и ту же сигнатуру - имя совпадает, параметров нет. По этой причине в дочернем классе Student возможно переопределение метода из родительского класса Person.

Однако переопределение возможно только для публичных (public) или защищенных (protected) методов.

Поэтому в коде слева переопределение происходит, а в коде справа - нет.

В коде слева метод printPerson вызывает getInfo из класса Person или Student - в зависимости от типа объекта, у которого вызван printPerson. Поэтому printPerson для Person выводит "Человек", а для Student - "Студент"

В коде справа метод printPerson всегда вызывает getInfo из класса Person, так как приватный метод getInfo не переопределяется одноименным методом класса Student. Поэтому printPerson всегда выводит "Человек".

Классы Person и Student вообще ничего не знают о приватных методах друг друга.
Дмитрий ПавелкоУченик (106) 3 месяца назад
Да, спасибо большое за подробный ответ! Мне уже помогли)
Похожие вопросы