logo

Java instanceof

  1. java instanceof
  2. Exemplu de instanță de operator
  3. Aplicarea operatorului instanceof cu o variabilă are valoare nulă
  4. Downcasting cu instanceof operator
  5. Downcasting fără instanță de operator

The operator java instanceof este folosit pentru a testa dacă obiectul este o instanță de tipul specificat (clasă sau subclasă sau interfață).

Instanța în java este cunoscută și ca tip operator de comparaţie deoarece compară instanța cu tipul. Returnează fie adevărat, fie fals. Dacă aplicăm operatorul instanceof cu orice variabilă care are valoare nulă, acesta returnează false.

Exemplu simplu de java instanceof

Să vedem exemplul simplu de operator de instanță în care testează clasa curentă.

Rajesh Khanna
 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Testează-l acum
 Output:true 

Un obiect de tip subclasă este, de asemenea, un tip de clasă părinte. De exemplu, dacă Câine extinde Animal, atunci obiectul Câine poate fi referit fie prin clasa Câine, fie prin clasa Animal.

anaconda vs șarpe piton

Un alt exemplu de operator 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 } } 
Testează-l acum
 Output:true 

instanceof în java cu o variabilă care are valoare nulă

Dacă aplicăm operatorul instanceof cu o variabilă care are valoare nulă, returnează false. Să vedem exemplul de mai jos în care aplicăm operatorul instanceof cu variabila care are valoare nulă.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Testează-l acum
 Output:false 

Downcasting cu java instanceof operator

Când tipul de subclasă se referă la obiectul clasei părinte, este cunoscut sub numele de downcasting. Dacă o executăm direct, compilatorul dă eroare de compilare. Dacă o efectuați prin tipcasting, ClassCastException este aruncată în timpul execuției. Dar dacă folosim instanceof operator, downcasting-ul este posibil.

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

Dacă efectuăm downcasting prin typecasting, ClassCastException este aruncată în timpul execuției.

diana ankudinova
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Posibilitate de downcasting cu instanceof

Să vedem exemplul, în care downcasting-ul este posibil prin instanța de operator.

 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); } } 
Testează-l acum
 Output:ok downcasting performed 

Downcasting fără utilizarea java instanceof

Reducerea poate fi, de asemenea, efectuată fără utilizarea instanței de operator, așa cum este afișat în exemplul următor:

 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); } } 
Testează-l acum
 Output:ok downcasting performed 

Să aruncăm o privire mai atentă la acest obiect real la care face referire a, este un obiect din clasa Dog. Deci, dacă o reducem, este în regulă. Dar ce se va întâmpla dacă vom scrie:

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

Înțelegerea utilizării reale a instanceof în java

Să vedem utilizarea reală a cuvântului cheie instanceof prin exemplul de mai jos.

 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); } } 
Testează-l acum
 Output: b method