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

1.6 KiB
Raw Blame History

  • Возможность вызвать метод определяется по типу ссылки
  • Ссылку нельзя привести к произвольному типу
  • Сслыку можно привести к более общему типу
  • Ссылку можно привести к реальному типу объекта
  • Оператор instanceof проверяет тип объекта

Оператор instanceof

// ColorSquare extends Square
ColorSquare s = new ColorSquare();
s instanceof ColorSquare // true
s instanceof Square // true
s instanceof String // false

Upcasting

Приведение к суперклассу

Square x = s;
x.area(); // OK
x.getColor(); // Ошибка - нет такого метода

Downcasting

Приведение к реальному типу

Если изначально был таким

ColorSquare s = new ColorSquare();
Square x = s;
x.area(); // OK

ColorSquare y = (ColorSquare) x;
y.getColor(); // OK

А вот если нет

Square s = new ColorSquare();
Square x = s;
x.area(); // OK

ColorSquare y = (ColorSquare) x;
// ClassCastException

Pattern Matching

Перед даункастом лучше проверить тип через instanceof

...
if (x instanceof ColorSquare) {
	ColorSquare y = (ColorSquare) x;
	y.getColor(); // OK
}

Либо более короткий синтаксис

...
if (x instanceof Colorsquare y) {
	y.getColor(); // OK
}

То есть после апкаста джава не забывает какой тип был изначально