This commit is contained in:
roma-dxunvrs
2026-09-04 22:55:43 +03:00
parent f57762fd3b
commit 4fabe16272
45 changed files with 323 additions and 20 deletions
@@ -0,0 +1,59 @@
- Возможность вызвать метод определяется по типу ссылки
- Ссылку нельзя привести к произвольному типу
- Сслыку можно привести к более общему типу
- Ссылку можно привести к реальному типу объекта
- Оператор `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
}
```
То есть после апкаста джава не забывает какой тип был изначально