Изучаю преобразование объектных типов в Java.
Пример:
есть класс Unit, базовый
от него наследуются классы Man, Robot
Тогда можно создать объекты:
Object object = new Man("Petya", 100); (вызывается конструктор класса Man)
Unit unit = new Robot("T-1000", "Arnold", 123); (вызывается конструктор класса Robot)
В классах Man и Robot есть метод printInfo(), а в Object (базовый класс, от которого наследуются все классы в Java) нет такого метода. Если попробую у объекта object вызвать метод printInfo(), то компилятор выдаст ошибку. Для этого использую явное преобразование, к типу Man:
((Man)object).printInfo(); - работает корректно
При этом, если написать
((Robot)object).printInfo(); - среда разработки не видит здесь ошибку, однако при запуске она появляется.
Где применяется такой механизм преобразования на практике?
Это же принцип подстановки Барбары Лисков?
Как я понял (возможно так и не понял) у нашего объекта unit (который инициализировался так:)
Unit unit = new Robot("T-1000", "Arnold", 123); (вызывается конструктор класса Robot)
есть методы класса Unit, при этом с помощью явного преобразования мы всегда можем вызвать методы еще и класса Robot. А нельзя ли сразу просто создавать объекты класса Robot? Применяется ли в реальной практике ситуации, когда нужны методы обоих классов одновременно?
Возможно вопрос глупый, хотел бы увидеть это на практике.