logo

Java instanceof

  1. java instanceof
  2. Príklad operátora instanceof
  3. Použitie operátora instanceof s premennou the have null value
  4. Downcasting s operátorom instanceof
  5. Downcasting bez inštancie operátora

The operátor java instanceof sa používa na testovanie, či je objekt inštanciou zadaného typu (trieda alebo podtrieda alebo rozhranie).

Instanceof v jazyku Java je tiež známy ako typ operátor porovnávania pretože porovnáva inštanciu s typom. Vráti buď true alebo false. Ak použijeme operátor instanceof s ľubovoľnou premennou, ktorá má hodnotu null, vráti hodnotu false.

Jednoduchý príklad java instanceof

Pozrime sa na jednoduchý príklad operátora inštancie, kde testuje aktuálnu triedu.

reťazec.hodnota
 class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } } 
Vyskúšajte to
 Output:true 

Objekt typu podtriedy je tiež typom nadradenej triedy. Napríklad, ak Pes rozširuje Zviera, potom objekt Pes môže byť odkazovaný buď triedou Pes alebo Zviera.

ako vrátiť pole java

Ďalší príklad operátora 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 } } 
Vyskúšajte to
 Output:true 

instanceof v jazyku Java s premennou, ktorá má hodnotu null

Ak použijeme operátor instanceof s premennou, ktorá má hodnotu null, vráti hodnotu false. Pozrime sa na príklad uvedený nižšie, kde použijeme operátor instanceof s premennou, ktorá má hodnotu null.

 class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } } 
Vyskúšajte to
 Output:false 

Downcasting pomocou operátora java instanceof

Keď typ podtriedy odkazuje na objekt nadradenej triedy, je známy ako downcasting. Ak to vykonáme priamo, kompilátor zobrazí chybu Compilation. Ak to vykonáte pretypovaním, ClassCastException sa vyvolá za behu. Ale ak použijeme operátor instanceof, downcasting je možný.

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

Ak vykonávame downcasting typovým pretypovaním, ClassCastException sa vyvolá za behu.

čo je mac os
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Možnosť downcastingu s inštanciouof

Pozrime sa na príklad, kde je downcasting možný operátorom 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); } } 
Vyskúšajte to
 Output:ok downcasting performed 

Downcasting bez použitia java instanceof

Downcasting je možné vykonať aj bez použitia operátora instanceof, ako je znázornené v nasledujúcom príklade:

 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); } } 
Vyskúšajte to
 Output:ok downcasting performed 

Pozrime sa bližšie na tento skutočný objekt, na ktorý sa vzťahuje a, je objekt triedy Dog. Takže ak to znížime, je to v poriadku. Čo sa však stane, ak napíšeme:

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

Pochopenie skutočného použitia instanceof v jazyku Java

Pozrime sa na skutočné použitie kľúčového slova instanceof na príklade uvedenom nižšie.

 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); } } 
Vyskúšajte to
 Output: b method