Андрей Панарин
Искусственный Интеллект
(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 вообще ничего не знают о приватных методах друг друга.