Оператор instanceof

Тренажер по Java для пользователей с начальным уровнем подготовки.

Тренажер по Java

instanceof — оператор Java, который проверяет, является ли объект экземпляром указанного класса или реализует интерфейс. Это полезно в ООП (наследование и полиморфизм), когда переменная имеет тип родителя, а фактический объект — один из наследников. Часто используется перед приведением типов, чтобы избежать ClassCastException. В онлайн-тренажере Java вы потренируетесь читать код и понимать, как работает проверка типов во время выполнения.

Пример:

if (obj instanceof String) { System.out.println(((String) obj).length()); }

  • Проверка работает только для ссылочных типов.
  • null instanceof AnyType всегда даёт false.
Список тем

1. Сопоставление: понятия вокруг instanceof

id: 40493_inst_01_compare_concepts

В левой колонке перечислены ключевые термины и понятия, связанные с оператором instanceof, приведением типов и полиморфизмом в Java. В правой колонке даны их краткие определения или характерные следствия. Сопоставьте каждый термин из левой колонки с соответствующим ему определением из правой. Обратите внимание, что в правой колонке нет лишних вариантов, но порядок определений перемешан.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
instanceof
Приведение типов (casting)
ClassCastException
Полиморфизм
null
Специальное значение ссылочного типа, обозначающее отсутствие объекта; при проверке instanceof возвращает false.
Исключение, возникающее при попытке приведения объекта к несовместимому типу во время выполнения.
Процесс явного преобразования типа ссылки на объект, возможный только если объект действительно является экземпляром целевого типа (или его подтипа).
Свойство ООП, позволяющее объекту принимать множество форм и обращаться к нему через ссылку базового типа.
Оператор, который проверяет, является ли объект экземпляром определённого класса или реализует определённый интерфейс.
Сообщения
Проверить
Показать подсказку

2. Собери проверку перед приведением типа

id: 40493_inst_02_select_fill_guard

В этом задании вам предстоит собрать корректную проверку с использованием оператора instanceof и безопасного приведения типа. В коде ниже объявлена переменная родительского типа Animal, которая ссылается на объект Dog. Вам нужно заполнить пропуски, выбрав подходящие элементы из выпадающего списка, чтобы код выполнял проверку типа и вызывал метод bark() у объекта Dog. Обратите внимание на синтаксис оператора instanceof и правильное указание типа при приведении.

Нужно правильно расставить в пропуски предложенные варианты
Animal animal = new Dog();
if (animal input1S input2S) {
    Dog dog = (input3S) animal;
    dog.bark();
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Что выведет код с instanceof в разных ветках?

id: 40493_inst_03_predict_result_polymorphism

Проанализируйте приведенный ниже код на Java. Определите, какие значения будут выведены на экран в результате выполнения программы. Выберите правильную последовательность значений (true/false) для каждого из выводов.

Выберите правильный вариант ответа
interface I { }
class A { }
class B extends A implements I { }

public class Main {
    public static void main(String[] args) {
        A a = new B();
        I i = new B();
        Object o = new B();
        A nullA = null;
        
        System.out.println("1: " + (a instanceof I));
        System.out.println("2: " + (i instanceof A));
        System.out.println("3: " + (o instanceof B));
        System.out.println("4: " + (nullA instanceof A));
        System.out.println("5: " + (nullA instanceof I));
        System.out.println("6: " + (o instanceof I));
    }
}
Сообщения
Проверить
Показать подсказку

4. Исправь ошибку в проверке типа

id: 40493_inst_04_error_wrong_type_check

В данном фрагменте кода на Java допущена ошибка в использовании оператора instanceof. Проверка типа выполнена некорректно, что приводит к неверному приведению типов и потенциальной ошибке во время выполнения программы. Найдите и исправьте строку с ошибкой, чтобы код корректно проверял тип объекта и выполнял безопасное приведение.

Найдите ошибку и исправьте
public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();
        
        if (animal instanceof Cat) {
            Dog dog = (Dog) animal;
            dog.bark();
        }
    }
}
 
class Animal {}
class Dog extends Animal {
    void bark() {
        System.out.println("Woof!");
    }
}
class Cat extends Animal {
    void meow() {
        System.out.println("Meow!");
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

5. Отметь все проверки instanceof

id: 40493_inst_05_click_target_instanceof_places

Внимательно изучите представленный фрагмент кода на Java. Ваша задача — найти и отметить (кликом) все места, где используется оператор `instanceof`. Оператор `instanceof` применяется для проверки типа объекта во время выполнения программы. Не отмечайте другие операторы (например, сравнения, присваивания) или имена переменных, даже если они находятся рядом с проверкой типа.

Кликните по всем фрагментам, которые подходят под условие задания.
public void processObject(Object obj) {
    if (obj {{==~|~t1}} null) {
        return;
    }
    
    if (obj {{instanceof~|~t2}} String) {
        String s = (String) obj;
        System.out.println("Длина строки: " + s.{{length()~|~t3}});
    } else if (obj {{instanceof~|~t4}} Integer) {
        Integer i = (Integer) obj;
        System.out.println("Число: " + i);
    } else if (obj {{instanceof~|~t5}} List) {
        List list = (List) obj;
        System.out.println("Это список");
    }
    
    // Проверка в сложном условии
    if (obj {{!=~|~t6}} null && obj {{instanceof~|~t7}} Number) {
        System.out.println("Это число");
    }
    
    // Пример без instanceof
    int x = 10;
    if (x {{>~|~t8}} 5) {
        System.out.println("x больше 5");
    }
}
Сообщения
Проверить
Показать подсказку

6. Заполни пропуски: поведение null и instanceof

id: 40493_inst_06_replace_null_behavior

В этом задании рассматривается поведение оператора instanceof при проверке переменной, содержащей null. Заполните пропуски в коде так, чтобы программа создала переменную типа Object, присвоила ей null, проверила, является ли эта переменная экземпляром класса String, и вывела результат проверки (который должен быть false). Обратите внимание на синтаксис объявления переменной, ключевое слово null и тип для проверки instanceof.

Заполните пропуски
public class Main {
    public static void main(String[] args) {
        input1S obj = input2S;
        boolean result = obj instanceof input3S;
        System.out.println(result);
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

7. Собери блок: проверка → приведение → использование

id: 40493_inst_07_build_from_parts_safe_cast

Из предложенных строк соберите корректный блок java-кода, который демонстрирует безопасное приведение типов с использованием оператора instanceof. Код должен создавать переменную типа Object, присваивать ей строку, проверять её тип, выполнять приведение и вызывать метод полученного объекта. Одна из строк является лишней и не должна входить в решение.

Перетяните в правильном порядке строки из одного блока в другой
Object obj = "Hello, World!";
if (obj instanceof String) {
    String str = (String) obj;
    System.out.println(str.toUpperCase());
}
System.out.println(obj);
String str = (String) obj;
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру