- java instanceof
- Exemplu de instanță de operator
- Aplicarea operatorului instanceof cu o variabilă are valoare nulă
- Downcasting cu instanceof operator
- 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