logo

Instància de Java

  1. instància de java
  2. Exemple d'instant d'operador
  3. Aplicant l'operador instanceof amb una variable té un valor nul
  4. Downcasting amb instanceof operador
  5. Downcasting sense instància d'operador

El operador java instanceof s'utilitza per comprovar si l'objecte és una instància del tipus especificat (classe o subclasse o interfície).

La instància de java també es coneix com a tipus operador de comparació perquè compara la instància amb el tipus. Retorna vertader o fals. Si apliquem l'operador instanceof amb qualsevol variable que tingui valor nul, retorna false.

cadena a char

Exemple senzill de java instanceof

Vegem l'exemple senzill d'operador d'instància on prova la classe actual.

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

Un objecte de tipus subclasse també és un tipus de classe pare. Per exemple, si el gos amplia Animal, l'objecte del gos es pot referir tant per la classe de gos com per l'animal.

Un altre exemple d'operador 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 } } 
Prova-ho ara
 Output:true 

instanceof en java amb una variable que té un valor nul

Si apliquem l'operador instanceof amb una variable que té un valor nul, retorna false. Vegem l'exemple que es mostra a continuació on apliquem l'operador instanceof amb la variable que té valor nul.

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

Downcasting amb java instanceof operador

Quan el tipus de subclasse fa referència a l'objecte de la classe pare, es coneix com a baixada. Si ho fem directament, el compilador dóna error de compilació. Si ho feu mitjançant l'ecasting, ClassCastException es llança en temps d'execució. Però si utilitzem l'operador instanceof, la baixada és possible.

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

Si realitzem un downcasting mitjançant typecasting, ClassCastException es llança en temps d'execució.

.següent java
 Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime 

Possibilitat de downcasting amb instanceof

Vegem l'exemple, on la baixada és possible per l'operador d'instància.

 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); } } 
Prova-ho ara
 Output:ok downcasting performed 

Downcasting sense l'ús de java instanceof

La baixada també es pot realitzar sense l'ús de l'operador instanceof, tal com es mostra a l'exemple següent:

 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); } } 
Prova-ho ara
 Output:ok downcasting performed 

Mirem més de prop aquest, l'objecte real al qual fa referència a, és un objecte de la classe Dog. Així que si el rebaixem, està bé. Però què passarà si escrivim:

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

Comprensió de l'ús real de instanceof a Java

Vegem l'ús real de la paraula clau instanceof amb l'exemple que es mostra a continuació.

 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); } } 
Prova-ho ara
 Output: b method