- java instanceof
- Példa az operátor példányára
- Az instanceof operátort egy változóval alkalmazva a null értékkel rendelkezik
- Downcasting instanceof operátorral
- 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