Оператор instanceof

Открыта

— Привет, Амиго! Ты уже раньше знакомился с оператором instanceof. Сегодня я расскажу тебе, как и где его можно использовать. instanceof – это очень простой и эффективный в использовании оператор.

— Звучит, как реклама!

— Он, и правда, очень простой. Он используется в виде: «объект» instanceof «класс».

Он проверяет, является ли объект объектом определенного класса. Все еще проще, чем я говорю. Смотри пример:

Код Описание
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt будет равно true. Объект, на который ссылается переменная o, является объектом класса Integer.
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt будет равно false. Объект, на который ссылается переменная o, не является объектом класса Integer, он является объектом класса String.
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof
FileInputStream;
isFIS будет равно true. Объект, на который ссылается переменная is, является объектом класса FileInputStream.
16
Задача
Java Core,  4 уровень,  1 лекция
Недоступна
Набираем код
Иногда думать не надо, строчить надо! Как ни парадоксально звучит, порой пальцы «запоминают» лучше, чем сознание. Вот почему во время обучения в секретном центре JavaRush вы иногда встречаете задания на набор кода. Набирая код, вы привыкаете к синтаксису и зарабатываете немного материи. А ещё — боретесь с ленью.

— Да, очень просто.

— Этот оператор учитывает и наследование. Вот смотри.

Код Описание
class Pet
{
}
class Cat extends Pet
{
}
class Tiger extends Cat
{
}
Тут мы видим три объявленных класса: животное, кот и тигр. Кот наследуется от Животного. А Тигр от Кота.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isPet = o instanceof Pet;
isCat будет равно true.
isTiger будет равно true.
isPet будет равно true.
Object o = new Pet();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isPet = o instanceof Pet;
isCat будет равно false.
isTiger будет равно false.
isPet будет равно true.

И даже интерфейсы:

Код Описание
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Создадим два класса: Cat, TomCat и интерфейс Moveable
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat будет равно true.
isMoveable будет равно true.
isTom будет равно true.
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat будет равно true.
isMoveable будет равно false.
isTom будет равно false.

Оператор instanceof имеет вид: a instanceof B.

Другими словами, оператор instanceof вернет значение true, если:

1) переменная а хранит ссылку на объект типа B

2) переменная a хранит ссылку на объект, класс которого унаследован от B

3) переменная а хранит ссылку на объект реализующий интерфейс B

Иначе оператор instanceof вернет значение false.

— Понятно. А зачем это нужно, дядя Риша?

— Об этом сегодня тебе расскажет Элли. Это очень хороший оператор. Сегодня ты в этом убедишься.

Комментарии (34)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Радик23 уровень, Казань
12 декабря 2018, 12:23
дядя Риша)))
Artemy 15 уровень, Санкт-Петербург
12 ноября 2018, 11:38
Опечатка в предложении " isFIS будет равно true. Объект, на который ссылается переменная o, является объектом класса FileInputStream. ". В данном конкретном примере не o, а is.
Олег19 уровень, Киев
7 января, 21:19
для модераторов. вот для наглядности:
Макс20 уровень, Киев
6 ноября 2018, 17:02
ОТЛИЧИЕ ИНТЕРФЕЙСА ОТ АБСТРАКТНОГО КЛАССА 1. Интерфейс описывает только поведение. У него нет состояния. А у абстрактного класса состояние есть: он описывает и то, и другое. 2. Абстрактный класс связывает между собой и объединяет классы, имеющие очень близкую связь. В то же время, один и тот же интерфейс могут реализовать классы, у которых вообще нет ничего общего. СУТЬ ✔ Интерфейс ─ это то что объект умеет делать. ✔ Абстрактный класс ─ это то, чем объект является.
Роман14 уровень
27 ноября 2018, 07:36
Держи в курсе.
Roman Bee33 уровень, Харьков
23 июля 2018, 08:55
Очень доступно описано. Спасибо.
Rihard198533 уровень
18 июня 2018, 13:15
Дядя Риша))))
Роман16 уровень
6 июня 2018, 15:03
Классный пример с наследованием! Тигр - это Кошка. Тигр - это Пэт; Но в то же время! Пэт - это не Кошка. Пэт - это не Тигр
Boris23 уровень
7 августа 2018, 14:03
правельно Пэт - это не только Кошка. Пэт - это не только Тигр, он нечто большее он может быть и Собака так что всегда false
Марина23 уровень
6 октября 2018, 18:06
Начала читать как стих )))
Макс20 уровень, Киев
6 ноября 2018, 22:00
Не все Пэты Кошки, но все Кошки Пэты. Не все Кошки Тигры, но все Тигры Кошки. © Пэт
seregadb15 уровень, Минск
28 февраля, 12:02
У меня почти так же уроки логики в университете проходили.
21 февраля 2018, 15:49
дядя Риша из Израиля
Дмитрий19 уровень, Новосибирск
26 сентября 2018, 20:31
дядя Риша Рабинович
Низам Резцов15 уровень
13 февраля 2018, 11:15
дядя Риша))
Ruben Hakobyan41 уровень
7 декабря 2017, 12:15
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof
FileInputStream;
isFIS будет равно true. Объект, на который ссылается переменная o, является объектом класса FileInputStream. ===================== По ходу в выделенном месте ошибочка вышла, должно было быть: "...переменная is..."
Александр21 уровень
11 ноября 2017, 10:03
672