@anya_hacker

Где на практике используется явное преобразование объектных типов в Java?

Изучаю преобразование объектных типов в 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? Применяется ли в реальной практике ситуации, когда нужны методы обоих классов одновременно?
Возможно вопрос глупый, хотел бы увидеть это на практике.
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Чаще всего приведения типов используются в говнокоде программистов, не осиливших даже учебник для начинающих.
Ответ написан
Комментировать
xez
@xez Куратор тега Java
TL Junior Roo
На практике применяется.
Например есть какой-то метод, который что-то делает с объектами типа Man и Robot.
И вот чтобы не писать два метода, которые, по сути делают одно и тоже, можно попробовать сделать метод унифицированный, в котором, возможно, понадобится преобразование типов (с предварительной проверкой через instanceof).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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