Skip to content

Uso do instanceof

Introdução

  • operador instanceof = ferramenta fundamental em Java para verificar o tipo de um objeto em tempo de execução
  • utilizado para determinar se um objeto é uma instância de uma classe específica ou de uma de suas subclasses
  • promove a segurança ao fazer operações de conversão - casting - de objetos para o tipo correto
  • checagem é feita durante a execução do programa
  • ajudando a evitar erros de ClassCastException - ocorrem quando se tenta converter um objeto para um tipo incompatível
// Sintaxe
if (objeto instanceof TipoDesejado) {
    // Ação segura, pois o objeto é do tipo especificado
}
// Exemplo de uso
Animal meuAnimal = new Cachorro();

if (meuAnimal instanceof Cachorro) {
    System.out.println("O objeto é uma instância de Cachorro.");
}

Conversão de objetos - casting

  • após verificar o tipo do objeto com instanceof, é seguro fazer a conversão de objetos / casting para o tipo desejado
  • casting = necessário para acessar métodos ou atributos específicos de uma subclasse, que não são visíveis/disponíveis através da referência da superclasse
  • o casting só deve ser feita após garantir que o objeto é do tipo esperado usando instanceof
Animal meuAnimal = new Cachorro();

if (meuAnimal instanceof Cachorro) {
    // Conversão segura, pois o objeto foi verificado
    Cachorro meuCachorro = (Cachorro) meuAnimal;
    meuCachorro.fazerSom(); // Acessa métodos específicos da classe Cachorro
}
  • no exemplo
    • primeiro, instanceof confirma que meuAnimal é de fato um Cachorro
    • em seguida, o objeto é convertido (cast) para a classe Cachorro para permitir acesso a métodos específicos desta classe

Exercícios

Questões

  1. O operador instanceof é usado para verificar se um objeto pertence a uma classe específica ou a uma de suas subclasses em tempo de execução.
  2. O operador instanceof é uma verificação em tempo de compilação que determina se um objeto pode ser convertido (cast) para outro tipo.
  3. O uso de instanceof retorna true se o objeto for compatível com a classe ou interface especificada, mesmo que seja uma subclasse.
  4. Se obj é uma referência para um objeto de classe A, então a expressão obj instanceof A sempre retornará true.
  5. A checagem com instanceof evita erros de ClassCastException ao tentar fazer o casting de um objeto para um tipo específico.
  6. O operador instanceof retorna false se o objeto que está sendo verificado for null.
  7. É possível utilizar instanceof para verificar se um objeto implementa uma interface específica, mesmo que a referência seja de uma classe pai.
  8. Se animal é uma referência de classe Animal e aponta para um objeto de classe Dog, então animal instanceof Dog retornará false porque a referência é do tipo Animal.
  9. O uso do operador instanceof em Java permite verificar se um objeto pertence a uma classe específica, mas não permite verificações com interfaces.
  10. O casting de um objeto é seguro depois de verificar com instanceof que o objeto é de um tipo compatível.

Gabarito

  1. Verdadeiro: o operador instanceof verifica em tempo de execução se um objeto pertence a uma classe específica ou a qualquer uma de suas subclasses.
  2. Falso: instanceof é uma verificação em tempo de execução, não em tempo de compilação. Ele avalia se o objeto é compatível com o tipo especificado.
  3. Verdadeiro: instanceof retorna true se o objeto for de uma classe específica ou de qualquer subclasse dessa classe, ou se implementar a interface especificada.
  4. Verdadeiro: se obj é uma referência para um objeto de classe A, então obj instanceof A retornará true, pois obj é uma instância da classe A.
  5. Verdadeiro: a verificação com instanceof pode evitar erros de ClassCastException ao confirmar que o objeto é compatível antes de realizar o casting.
  6. Verdadeiro: se o objeto sendo verificado for null, instanceof sempre retorna false, pois null não é instância de nenhuma classe.
  7. Verdadeiro: instanceof pode ser usado para verificar se um objeto implementa uma interface específica, mesmo que a referência usada seja de uma classe pai.
  8. Falso: animal instanceof Dog retornará true se animal apontar para um objeto da classe Dog, mesmo que a referência seja do tipo Animal, pois Dog é uma subclasse de Animal.
  9. Falso: o operador instanceof pode verificar tanto se um objeto pertence a uma classe específica quanto se implementa uma interface, permitindo uma ampla gama de checagens.
  10. Verdadeiro: o casting é considerado seguro após uma verificação com instanceof, pois garante que o objeto é do tipo correto ou compatível.