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

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

Войти через центр авторизации
Похожие вопросы
Sportmaster Lab Волгоград
от 200 000 до 350 000 ₽
Sportmaster Lab Екатеринбург
от 200 000 до 350 000 ₽