logo

Instância Java de

  1. instância java
  2. Exemplo de operador instanceof
  3. Aplicando o operador instanceof com uma variável com valor nulo
  4. Downcasting com operador instanceof
  5. Downcasting sem operador instanceof

O operador java instanceof é usado para testar se o objeto é uma instância do tipo especificado (classe ou subclasse ou interface).

O instanceof em java também é conhecido como tipo operador de comparação porque compara a instância com o tipo. Ele retorna verdadeiro ou falso. Se aplicarmos o operador instanceof com qualquer variável que tenha valor nulo, ele retornará falso.

string para inteiro java

Exemplo simples de instância java

Vamos ver o exemplo simples de operador de instância onde ele testa a classe atual.

 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Teste agora
 Output:true 

Um objeto do tipo subclasse também é um tipo de classe pai. Por exemplo, se Dog estende Animal, então o objeto Dog pode ser referido pela classe Dog ou Animal.

Outro exemplo de operador java instanceof

 class Animal{} class Dog1 extends Animal{//Dog inherits Animal public static void main(String args[]){ Dog1 d=new Dog1(); System.out.println(d instanceof Animal);//true } } 
Teste agora
 Output:true 

instanceof em java com uma variável que possui valor nulo

Se aplicarmos o operador instanceof com uma variável que possui valor nulo, ele retornará falso. Vejamos o exemplo abaixo onde aplicamos o operador instanceof com a variável que possui valor nulo.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Teste agora
 Output:false 

Downcasting com operador java instanceof

Quando o tipo Subclasse se refere ao objeto da classe Pai, isso é conhecido como downcasting. Se executarmos diretamente, o compilador apresentará erro de compilação. Se você executar isso por conversão de tipo, ClassCastException será lançada em tempo de execução. Mas se usarmos o operador instanceof, o downcasting é possível.

 Dog d=new Animal();//Compilation error 

Se realizarmos downcasting por typecasting, ClassCastException será lançada em tempo de execução.

converter string para json java
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Possibilidade de downcasting com instanceof

Vejamos o exemplo, onde o downcasting é possível pelo operador instanceof.

 class Animal { } class Dog3 extends Animal { static void method(Animal a) { if(a instanceof Dog3){ Dog3 d=(Dog3)a;//downcasting System.out.println('ok downcasting performed'); } } public static void main (String [] args) { Animal a=new Dog3(); Dog3.method(a); } } 
Teste agora
 Output:ok downcasting performed 

Downcasting sem o uso de java instanceof

O downcasting também pode ser executado sem o uso do operador instanceof, conforme exibido no exemplo a seguir:

 class Animal { } class Dog4 extends Animal { static void method(Animal a) { Dog4 d=(Dog4)a;//downcasting System.out.println('ok downcasting performed'); } public static void main (String [] args) { Animal a=new Dog4(); Dog4.method(a); } } 
Teste agora
 Output:ok downcasting performed 

Vamos dar uma olhada nisso, o objeto real referido por a é um objeto da classe Dog. Então, se o rebaixarmos, tudo bem. Mas o que acontecerá se escrevermos:

 Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator 

Compreendendo o uso real de instanceof em java

Vamos ver o uso real da palavra-chave instanceof pelo exemplo abaixo.

 interface Printable{} class A implements Printable{ public void a(){System.out.println('a method');} } class B implements Printable{ public void b(){System.out.println('b method');} } class Call{ void invoke(Printable p){//upcasting if(p instanceof A){ A a=(A)p;//Downcasting a.a(); } if(p instanceof B){ B b=(B)p;//Downcasting b.b(); } } }//end of Call class class Test4{ public static void main(String args[]){ Printable p=new B(); Call c=new Call(); c.invoke(p); } } 
Teste agora
 Output: b method