logo

Java instanceof

  1. instance javaof
  2. Příklad operátoru instanceof
  3. Použití operátoru instanceof s proměnnou the have null value
  4. Downcasting s operátorem instanceof
  5. Downcasting bez instance operátora

The operátor java instanceof se používá k testování, zda je objekt instancí zadaného typu (třída nebo podtřída nebo rozhraní).

Instanceof v jazyce Java je také známá jako typ srovnávací operátor protože porovnává instanci s typem. Vrací buď true nebo false. Pokud použijeme operátor instanceof s libovolnou proměnnou, která má hodnotu null, vrátí false.

Jednoduchý příklad java instanceof

Podívejme se na jednoduchý příklad operátoru instance, kde testuje aktuální třídu.

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

Objekt typu podtřídy je také typem nadřazené třídy. Například, pokud Pes rozšiřuje Zvíře, pak objekt Pes může být odkazován buď třídou Pes nebo Zvíře.

Další příklad operátoru 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 } } 
Otestujte to hned
 Output:true 

instanceof v jazyce Java s proměnnou, která má hodnotu null

Pokud použijeme operátor instanceof s proměnnou, která má hodnotu null, vrátí false. Podívejme se na příklad uvedený níže, kde použijeme operátor instanceof s proměnnou, která má hodnotu null.

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

Downcasting s operátorem java instanceof

Když typ podtřídy odkazuje na objekt třídy Parent, nazývá se to downcasting. Pokud to provedeme přímo, kompilátor zobrazí chybu Compilation. Pokud to provedete přetypováním, ClassCastException je vyvolána za běhu. Ale pokud použijeme operátor instanceof, downcasting je možný.

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

Pokud provádíme downcasting typovým obsazením, je za běhu vyvolána výjimka ClassCastException.

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

Možnost downcastingu s instanceof

Podívejme se na příklad, kde je downcasting možný pomocí operátoru 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); } } 
Otestujte to hned
 Output:ok downcasting performed 

Downcasting bez použití java instanceof

Downcasting lze také provést bez použití operátoru instanceof, jak je znázorněno v následujícím příkladu:

 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); } } 
Otestujte to hned
 Output:ok downcasting performed 

Podívejme se blíže na tento skutečný objekt, na který odkazuje a, je objekt třídy Dog. Takže když to stáhneme, je to v pořádku. Ale co se stane, když napíšeme:

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

Pochopení skutečného použití instanceof v jazyce Java

Podívejme se na skutečné použití klíčového slova instanceof na příkladu uvedeném níže.

 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); } } 
Otestujte to hned
 Output: b method