logo

Java példány

  1. java instanceof
  2. Példa az operátor példányára
  3. Az instanceof operátort egy változóval alkalmazva a null értékkel rendelkezik
  4. Downcasting instanceof operátorral
  5. Downcasting operátor példány nélkül

A java instanceof operátor annak tesztelésére szolgál, hogy az objektum a megadott típusú (osztály vagy alosztály vagy interfész) példánya-e.

A Java példányát típusnak is nevezik összehasonlító operátor mert összehasonlítja a példányt a típussal. Igazat vagy hamisat ad vissza. Ha az instanceof operátort bármely null értékű változóval alkalmazzuk, akkor false értéket ad vissza.

Egyszerű példa a java instanceof-ra

Nézzük a példányoperátor egyszerű példáját, ahol az aktuális osztályt teszteli.

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

Az alosztály típusú objektumok egyben szülőosztályok is. Például, ha a Kutya kiterjeszti az Állatot, akkor a Kutya objektum Kutya vagy Állat osztály szerint is hivatkozhat.

Egy másik példa a java instanceof operátorra

 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 } } 
Tesztelje most
 Output:true 

instanceof java-ban null értékű változóval

Ha az instanceof operátort null értékű változóval alkalmazzuk, akkor false értéket ad vissza. Lássuk az alábbi példát, ahol az instanceof operátort alkalmazzuk null értékű változóval.

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

Downcasting java instanceof operátorral

Amikor az alosztály típusa a szülő osztály objektumára utal, azt downcastingnak nevezik. Ha közvetlenül hajtjuk végre, a fordító fordítási hibát ad. Ha típusküldéssel hajtja végre, akkor a ClassCastException futásidőben megjelenik. De ha az instanceof operátort használjuk, lehetséges a downcasting.

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

Ha típusküldéssel hajtjuk végre a downcasting-ot, a ClassCastException futásidőben kerül kidobásra.

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

Lehetőség a downcastingra instanceof-al

Lássuk a példát, ahol a downcasting az instanceof operátorral lehetséges.

 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); } } 
Tesztelje most
 Output:ok downcasting performed 

Downcasting java instanceof használata nélkül

A downcasting az instanceof operátor használata nélkül is végrehajtható, amint az a következő példában látható:

 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); } } 
Tesztelje most
 Output:ok downcasting performed 

Nézzük meg közelebbről ezt a tényleges objektumot, amelyre a hivatkozik, a Dog osztály egyik objektuma. Tehát ha lecsökkentjük, akkor rendben van. De mi lesz, ha azt írjuk:

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

Az instanceof valódi használatának megértése java-ban

Nézzük meg az instanceof kulcsszó valódi használatát az alábbi példában.

 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); } } 
Tesztelje most
 Output: b method