- instance javaof
- Příklad operátoru instanceof
- Použití operátoru instanceof s proměnnou the have null value
- Downcasting s operátorem instanceof
- 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