оператор instanceof обеспечивает проверку типа времени выполнения. Например, если у вас есть класс Food и два подтипа Bread4 и Bread5, то:
static void method(Food a) {
Bread4 b = (Bread4) a;
System.out.println("Downcasting performed");
}
вызывает этот метод, например:
Food four = new Bread4();
Food five = new Bread5();
Bread4.method(four); //the cast inside is done to Bread4, therefore this would work
Bread4.method(five); //the object of type Bread5 will be cast to Bread4 -> ClassCastException
Чтобы этого избежать, используйте поэтому оператор instanceof
static void method(Food a) {
if (a instanceof Bread4) {
Bread4 b = (Bread4) a;
System.out.println("Downcasting performed");
}
}
, если вы вызываете
Bread4.method(five)
, проверка возвращает false, поэтому не возникает ClassCastException.
Надеюсь, что это ответит на ваш вопрос ,