3. Преобразование ссылочных типов
Ссылочные типы (классы, интерфейсы, массивы) также могут преобразовываться, но это регулируется иерархией наследования.
• Принцип подстановки (Substitution Principle): Переменной заданного типа может быть присвоено значение любого подтипа этого типа. Метод с параметром определенного типа может быть вызван с аргументом любого подтипа. Это позволяет неявно преобразовывать подкласс в суперкласс (восходящее преобразование).
• Явное приведение (Downcasting): Для присваивания ссылки на суперкласс переменной подкласса требуется явное приведение типов (например, (Integer)stack.pop()).
• Проверка типов (instanceof): Перед явным приведением часто необходимо убедиться, что объект действительно принадлежит к целевому типу, чтобы избежать ошибки ClassCastException
во время выполнения.
◦ Пример: if (o instanceof Integer) { ... }.
• Pattern Matching (сопоставление с образцом): В современных версиях Java (начиная с Java 14/16/21) оператор instanceof
и конструкция switch
поддерживают сопоставление с образцом. Это позволяет избежать явного приведения типов после проверки. Например, case Apparel apparel -> ...
автоматически объявляет переменную apparel
нужного типа.

