logo

Java primjerak

  1. java instanceof
  2. Primjer operatora instanceof
  3. Primjena operatora instanceof s varijablom ima vrijednost null
  4. Spuštanje s operatorom instanceof
  5. Spuštanje bez instanceof operatora

The operator java instanceof koristi se za testiranje je li objekt instanca navedenog tipa (klasa ili podklasa ili sučelje).

Instanceof u Javi također je poznata kao type operator usporedbe jer uspoređuje instancu s tipom. Vraća ili true ili false. Ako primijenimo operator instanceof s bilo kojom varijablom koja ima vrijednost null, ona vraća false.

umetanje sortiranje java

Jednostavan primjer java instanceof

Pogledajmo jednostavan primjer operatora instance gdje testira trenutnu klasu.

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

Objekt tipa potklase također je tip nadređene klase. Na primjer, ako pas proširuje životinju, tada na objekt psa može referirati ili klasa pas ili životinja.

Još jedan primjer java operatora 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 } } 
Testirajte sada
 Output:true 

instanceof u Javi s varijablom koja ima vrijednost null

Ako primijenimo operator instanceof s varijablom koja ima vrijednost null, vraća false. Pogledajmo donji primjer gdje primjenjujemo operator instanceof s varijablom koja ima vrijednost null.

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

Spuštanje s java operatorom instanceof

Kada se tip podklase odnosi na objekt roditeljske klase, to je poznato kao downcasting. Ako to izvedemo izravno, prevodilac daje grešku kompilacije. Ako to izvedete primjenom tipa, ClassCastException se izbacuje tijekom izvođenja. Ali ako koristimo operator instanceof, moguće je niže pretvaranje.

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

Ako izvršimo downcasting tipiziranjem, ClassCastException se izbacuje tijekom izvođenja.

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

Mogućnost spuštanja s instanceof

Pogledajmo primjer, u kojem je moguće spuštanje prema instanceof operatoru.

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

Spuštanje bez upotrebe java instanceof

Spuštanje se također može izvesti bez upotrebe operatora instanceof kao što je prikazano u sljedećem primjeru:

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

Pogledajmo pobliže ovaj, stvarni objekt na koji upućuje a je objekt klase Pas. Dakle, ako ga spustimo, u redu je. Ali što će se dogoditi ako napišemo:

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

Razumijevanje stvarne upotrebe instanceof u Javi

Pogledajmo stvarnu upotrebu ključne riječi instanceof na donjem primjeru.

 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); } } 
Testirajte sada
 Output: b method