Files
obsidian/Программирование на Java/Синтаксис и типы/Работа с данными и типами/Приведение ссылочных типов.md
T
roma-dxunvrs 4fabe16272 04.09
2026-09-04 22:55:43 +03:00

59 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- Возможность вызвать метод определяется по типу ссылки
- Ссылку нельзя привести к произвольному типу
- Сслыку можно привести к более общему типу
- Ссылку можно привести к реальному типу объекта
- Оператор `instanceof` проверяет тип объекта
## Оператор `instanceof`
```Java
// ColorSquare extends Square
ColorSquare s = new ColorSquare();
s instanceof ColorSquare // true
s instanceof Square // true
s instanceof String // false
```
## Upcasting
Приведение к суперклассу
```Java
Square x = s;
x.area(); // OK
x.getColor(); // Ошибка - нет такого метода
```
## Downcasting
Приведение к реальному типу
Если изначально был таким
```Java
ColorSquare s = new ColorSquare();
Square x = s;
x.area(); // OK
ColorSquare y = (ColorSquare) x;
y.getColor(); // OK
```
А вот если нет
```Java
Square s = new ColorSquare();
Square x = s;
x.area(); // OK
ColorSquare y = (ColorSquare) x;
// ClassCastException
```
## Pattern Matching
Перед даункастом лучше проверить тип через `instanceof`
```Java
...
if (x instanceof ColorSquare) {
ColorSquare y = (ColorSquare) x;
y.getColor(); // OK
}
```
Либо более короткий синтаксис
```Java
...
if (x instanceof Colorsquare y) {
y.getColor(); // OK
}
```
То есть после апкаста джава не забывает какой тип был изначально