Наследование. Ссылка переменой супер класса на объекст сабкласса

Здраствуйте товарищи, подскажите пожалуйста зачем мы иногда ссылаемся на объект подкласса ссылкой переменной супер класса? Например: class Employee {}

class Teacher extends Employee{} ....

Employee emp1 = new Teacher();

Зачем в java так делают, какой с смысл в этом, что нам это дает ?


Ответы (2 шт):

Автор решения: Fyodor

Это значит что к ссылке emp1 ты можешь присвоить любой объект типа Employee: например объекты классов Fireman extends Employee{}, Doctor extends Employee{}, Surgeon extends Doctor{}.

Дело в том что у всех наследников класса Employee имеется интерфейс класса Employee (все не-private поля и методы), поэтому любой наследник Employee может рассматриваться в программе как объект типа Employee.

Это называется полиморфизм или позднее связывание.

Если объяснять на пальцах, то допустим у тебя есть функция void dismiss(Employee e){}. Для выполнения функции нужно, чтобы объект e обладал свойствами Employee. Для того, чтобы ты мог применить эту функцию к объекту другого класса, то тебе достаточно определить в нем свойства Employee и объявить наследование.

→ Ссылка
Автор решения: Oleksandr Borshch

Изучи полиморфизм. Попросту говоря, это делается, чтобы методы суперкласса были доступны в объекте подкласса. То есть в суперклассе ты можешь создать общие методы для всех потомков этого типа. А уже в классах-потомках можно переопределить эти методы для нужной функциональности.

В твоем случае (Employee emp1 = new Teacher();) объекту emp1 будут доступны методы как класса Teacher, так и суперкласса Employee.

Если у суперкласса и подкласса будут методы с одинаковыми именами и количеством параметров, то приоритет выполнения будет отдан методу подкласса. Чтобы явно выполнить метод суперкласса нужно воспользоваться ключевым словом super.

→ Ссылка