"Olá, amigo! Você já conhece o operador instanceof . Hoje vou te contar como e onde ele pode ser utilizado. instanceof é um operador muito simples e eficiente."

"Isso soa como um anúncio!"

"Realmente é muito simples. É usado assim: «objeto» instância de «classe» ."

Ele verifica se um objeto é uma instância de uma classe específica. É mais fácil do que explicar. Veja este exemplo:

Código Descrição
Object o = new Integer(3);
boolean isInt = o instanceof Integer;
isInt será verdadeiro . O objeto referenciado pela variável o é uma instância da classe Integer .
Object o = "Mama";
boolean isInt = o instanceof Integer;
isInt será falso . O objeto referenciado pela variável o não é uma instância da classe Integer . É um objeto String .
InputStream is = new FileInputStream("");
boolean isFIS = is instanceof FileInputStream;
isFIS será verdadeiro . O objeto referenciado pela variável o é uma instância da classe FileInputStream .

"Sim, isso é muito simples."

"Este operador também é responsável pela herança. Confira."

Código Descrição
class Animal
{
}
class Cat extends Animal
{
}
class Tiger extends Cat
{
}
Aqui temos três declarações de classe: Animal, Cat e Tiger. Gato herda Animal. E Tiger herda Cat.
Object o = new Tiger();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat  será  verdadeiro .
isTiger  será  verdadeiro .
isAnimal  será  true .
Object o = new Animal();
boolean isCat = o instanceof Cat;
boolean isTiger = o instanceof Tiger;
boolean isAnimal = o instanceof Animal;
isCat  será false .
isTiger  será  false .
isAnimal  será  true .

E até interfaces:

Código Descrição
interface Moveable
{
}
class Cat
{
}
class TomCat extends Cat implements Moveable
{
}
Crie duas classes: Cat, TomCat e a interface Moveable
Cat o = new TomCat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat  será  verdadeiro .
isMoveable  será  true .
isTom  será  verdadeiro .
Cat o = new Cat();
boolean isCat = o instanceof Cat;
boolean isMoveable = o instanceof Moveable;
boolean isTom = o instanceof TomCat;
isCat  será  verdadeiro .
isMoveable  será  false .
isTom  será  false .

O operador instanceof se parece com isto: a instanceof B .

Em outras palavras, o operador instanceof retornará true se:

1) a variável a armazena uma referência a um objeto do tipo B

2)  a variável a armazena uma referência a um objeto cuja classe herda  B

3)  a variável a armazena uma referência a um objeto que implementa a interface  B

Caso contrário, o operador instanceof retornará false .

"Entendi. Então, por que isso é necessário, tio Rishi?"

"Ellie vai falar sobre isso hoje. Esta é uma operadora muito legal. Você vai se convencer disso hoje."