Palavra-chave instanceof em Java

A palavra-chave instanceof em Java é usada para verificar se um objeto é uma instância de uma classe específica ou implementa uma interface. Ela retorna um valor booleano (true ou false), dependendo se o objeto é do tipo especificado ou não.

Sintaxe de instanceof

objeto instanceof Tipo
  • objeto: A referência do objeto a ser verificado.
  • Tipo: A classe ou interface a ser comparada.

Se o objeto for uma instância da classe especificada ou implementa a interface, a expressão retorna true. Caso contrário, retorna false.

Exemplo de Uso de instanceof

class Animal { }

class Cachorro extends Animal { }

public class Main {
    public static void main(String[] args) {
        Animal a = new Cachorro();

        // Verificando se 'a' é uma instância de Cachorro
        if (a instanceof Cachorro) {
            System.out.println("a é uma instância de Cachorro");
        } else {
            System.out.println("a não é uma instância de Cachorro");
        }

        // Verificando se 'a' é uma instância de Animal
        if (a instanceof Animal) {
            System.out.println("a é uma instância de Animal");
        }
    }
}








Saída:

a é uma instância de Cachorro
a é uma instância de Animal

No exemplo acima:

  • a instanceof Cachorro retorna true porque a foi instanciado como um objeto da classe Cachorro.
  • a instanceof Animal também retorna true, porque Cachorro herda de Animal.

Usos Comuns

Verificação de Tipos em Herança e Polimorfismo: instanceof é frequentemente usado ao trabalhar com polimorfismo, para verificar o tipo real de um objeto em tempo de execução.

Verificação de Interfaces: O operador também pode ser usado para verificar se um objeto implementa uma interface.

interface Voavel { }

class Passaro implements Voavel { }

public class Main {
    public static void main(String[] args) {
        Passaro p = new Passaro();

        // Verificando se 'p' implementa a interface Voavel
        if (p instanceof Voavel) {
            System.out.println("p pode voar");
        }
    }
}

Saída:

p pode voar

Regras Importantes:

  • Se objeto for null, a expressão objeto instanceof Tipo sempre retorna false.
  • instanceof só pode ser usado com tipos de referência (classes e interfaces), não com tipos primitivos.

Exemplo com null:

Animal a = null;

if (a instanceof Animal) {
    System.out.println("a é uma instância de Animal");
} else {
    System.out.println("a não é uma instância de Animal");
}

Saída:

a não é uma instância de Animal

Resumo:

  • instanceof verifica se um objeto é de um tipo específico ou implementa uma interface.
  • Retorna true se o objeto for uma instância do tipo especificado, caso contrário, retorna false.
  • É muito útil para verificações de tipo em hierarquias de classes e interfaces.