English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Java

Java Controle de Fluxo

Java Array

Java Orientação a Objetos (I)

Java Orientação a Objetos (II)

Java Orientação a Objetos (III)

Tratamento de Exceções Java

Java Lista (List)

Java Fila (Queue)

Java Mapa (Map)

Java Conjunto (Set)

Java Entrada e Saída (I/O)

Java Reader/Writer

Outros tópicos do Java

Palavra-chave instanceof Java

Neste tutorial, você aprenderá detalhadamente sobre o operador instanceof do Java com a ajuda de exemplos.

No Java, o símbolo instanceof é um operador binário. Ele é usado para verificar se um objeto é uma instância de uma classe específica.

O operador também verifica se o objeto é uma instância da classe que implementa a interface (será discutido mais tarde neste tutorial).

A sintaxe do operador instanceof é:

result = objectName instanceof className;

 O operando esquerdo do operador instanceof é o nome do objeto, o operando direito é o nome da classe. Se o objeto for uma instância da classe, o resultado é true; caso contrário, é false.

Exemplo1: instanceof

class Main {
    public static void main (String[] args) {
        String name = "w3codebox";
        Integer age = 22;
        System.out.println("O nome é uma instância de String? "+ (name instanceof String));
        System.out.println("age é uma instância da classe Integer: "+ (age instanceof Integer));
    }
}

Saída:

name é uma instância da classe String: true
age é uma instância da classe Integer: true

No exemplo acima, criamos um objeto do tipo String name e outro objeto do tipo Integer age. Em seguida, usamos o operador instanceof para verificar se o nome é do tipo String e se age é do tipo Integer.

instanceof e herança

No caso de herança, o operador instanceof é usado para verificar se o objeto da subclasse também é uma instância da superclasse.

Exemplo2:instanceof na herança

class Animal {
}
//A classe Dog é uma subclasse da classe Animal
class Dog extends Animal {
}
class Main {
    public static void main(String[] args){
        Dog d1 = new Dog();
        //Verificar d1É um objeto da classe Dog
        System.out.println("d1É uma instância da classe Dog: "+ (d1 instanceof Dog));
       
        //Verificar d1É um objeto da classe Animal
        System.out.println("d1É uma instância da classe Animal: "+ (d1 instanceof Animal));
    }
}

Saída:

d1É uma instância da classe Dog: true
d1É uma instância da classe Animal: true

No exemplo acima, d1são instâncias das classes Dog e Animal. Portanto, d1 instanceof Dog e d1 instanceof Animal são todos true.

Classe Object

Em Java, todas as classes herdam da classe Object, e a herança da classe Object não usa a palavra-chave extends. Esta herança ocorre implicitamente em Java.

Exemplo3:Classe Object

class Animal {
}
class Dog {
}
class Cat {
}
class Main {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        Animal a1 = new Animal();
        Cat c1 = new Cat();
        System.out.println("d1É uma instância da classe Object: "+ (d1 instanceof Object));
        System.out.println("a1É uma instância da classe Object: "+ (a1 instanceof Object));   
        System.out.println("c1É uma instância da classe Object: "+ (c1 instanceof Object));
    }
}

Saída:

d1É uma instância da classe Object: true
a1É uma instância da classe Object: true
c1É uma instância da classe Object: true

No exemplo acima, criamos os objetos a, Dog e Cat da classe Animal1、d1e c1Já usamos o operador instanceof para verificar esses objetos a1, d1, c1Também é um objeto da classe Object. Os resultados de saída são todos true (verdadeiro).

Porque a classe Object é a classe raiz definida no pacote java.lang. Todas as outras classes são subclasses da classe Object, que forma uma hierarquia em Java.

Objeto de conversão de tipo para cima e para baixo

No Java, o objeto da subclass pode ser tratado como um objeto da classe pai. Isso é chamado de conversão de tipo para cima.De uma forma simples, é converter o objeto da subclass em um objeto da classe pai. Aqui, o objeto da classe pai pode ser uma interface.

O compilador Java executa automaticamente a conversão de tipo para cima.

Exemplo4:Conversão de tipo para cima

class Animal {
    public void displayInfo() {
        System.out.println("Eu sou um animal.");
    }
}
class Dog extends Animal {
}
class Main {
    public static void main(String[] args) {
        Dog d1 = new Dog();
        Animal a1 = d1;
        a1.displayInfo();
    }
}

Saída:

Eu sou um animal.

No exemplo acima, criamos um objeto da classe Dog, d1. Usamos d1Usamos o objeto para criar um objeto da classe Animal, a1. Isso é chamado de conversão de tipo para cima no Java.

O código executa sem problemas. Isso porque a conversão de tipo para cima é feita automaticamente pelo compilador Java.

A conversão de tipo para baixo é o processo oposto da conversão de tipo para cima, ou seja, o processo oposto da conversão de tipo para cima, que é converter o objeto da classe pai em um objeto da subclass.

No caso da conversão de tipo para baixo, o objeto da classe pai é tratado como um objeto da subclass. Devemos explicitamente indicar ao compilador Java a conversão de tipo para baixo.

Exemplo5:Problema de conversão de tipo para baixo

class Animal {
}
class Dog extends Animal {
   public void displayInfo() {
       System.out.println("Eu sou um cachorro.");
   }
}
class Main {
   public static void main(String[] args) {
       Animal a1 = new Animal();
       Dog d1 = (Dog)a1; // Conversão de tipo para baixo
 
       d1.displayInfo();
   }
}

Ao executar o programa, obteremos uma exceção chamada ClassCastException. Vamos ver o que acontece aqui.

Aqui, criamos um objeto do pai Animal, a1.1O objeto é forçado a se converter em um objeto da subclass Dog, d1.

Isso causou um problema. Isso porque a variável a do pai Animal1O objeto também pode referenciar outras subclasses. Se criarmos outra subclass Cat juntamente com Dog; o animal pode ser um gato ou um cachorro, causando ambiguidade.

Para resolver esse problema, podemos usar o operador instanceof. Vamos ver como fazer isso:

Exemplo6:Usar instanceof para resolver a conversão de tipo para baixo

class Animal {
}
class Dog extends Animal {
  public void displayInfo() {
     System.out.println("Eu sou um cachorro");
  }
}
class Main {
  public static void main(String[] args) {
    Dog d1 = new Dog();
    Animal a1 = d1;    // Conversão de tipo para cima
    if (a1 instanceof Dog) {
       Dog d2 = (Dog)a1;    // Conversão de tipo para baixo
       d2.displayInfo();
    }
  }
}

Saída:

Eu sou um cachorro

No exemplo acima, usamos o operador instanceof para verificar a1Se o objeto é uma instância da classe Dog. Apenas quando a expressão a1 A conversão de tipo para baixo é feita apenas quando instanceof Dog for true.

Interface e instanceof

O operador instanceof também é usado para verificar se o objeto de uma classe é uma instância de uma interface implementada por essa classe

Exemplo7:Interface com instanceof

interface Animal {
}
class Dog implements Animal {
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      System.out.println("d1É uma instância de Animal o objeto? "+(d1 instanceof Animal));
   }
}

Saída:

d1É uma instância de Animal o objeto? true

No exemplo acima, criamos uma classe Dog que implementa a interface Animal

Em seguida, criamos um objeto do tipo Dog d1Já usamos o operador instanceof para verificar d1Objeto também é uma instância da interface Animal?