English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
No caso de herança, o operador instanceof é usado para verificar se o objeto da subclasse também é uma instância da superclasse.
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.
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.
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.
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.
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.
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:
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.
O operador instanceof também é usado para verificar se o objeto de uma classe é uma instância de uma interface implementada por essa classe
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?