- instance java de
- Exemple d'opérateur instanceof
- Application de l'opérateur instanceof avec une variable qui a une valeur nulle
- Downcasting avec l'opérateur instanceof
- Downcasting sans opérateur instanceof
Le opérateur instance d'instance java est utilisé pour tester si l'objet est une instance du type spécifié (classe ou sous-classe ou interface).
Actrice Rubina Dilaik
L'instanceof en Java est également connue sous le nom de type opérateur de comparaison car il compare l'instance avec le type. Il renvoie vrai ou faux. Si nous appliquons l’opérateur instanceof avec une variable ayant une valeur nulle, il renvoie false.
Exemple simple d'instance Java
Voyons l'exemple simple d'un opérateur d'instance où il teste la classe actuelle.
class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } }Testez-le maintenant
Output:true
Un objet de type sous-classe est également un type de classe parent. Par exemple, si Dog étend Animal, alors l'objet de Dog peut être référencé par la classe Dog ou Animal.
Un autre exemple d'opérateur 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 } }Testez-le maintenant
Output:true
instanceof en Java avec une variable qui a une valeur nulle
Si nous appliquons l’opérateur instanceof avec une variable qui a une valeur nulle, il renvoie false. Voyons l'exemple ci-dessous où nous appliquons l'opérateur instanceof avec la variable qui a une valeur nulle.
class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } }Testez-le maintenant
Output:false
Downcasting avec l'opérateur java instanceof
Lorsque le type de sous-classe fait référence à l’objet de la classe Parent, on parle de downcasting. Si nous l'exécutons directement, le compilateur donne une erreur de compilation. Si vous l'effectuez par transtypage, ClassCastException est levée au moment de l'exécution. Mais si nous utilisons l’opérateur instanceof, le downcasting est possible.
mot-clé statique en Java
Dog d=new Animal();//Compilation error
Si nous effectuons un downcasting par transtypage, ClassCastException est levée au moment de l'exécution.
Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime
Possibilité de downcasting avec instanceof
Voyons l'exemple, où le downcasting est possible par l'opérateur instanceof.
liste vide java
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); } }Testez-le maintenant
Output:ok downcasting performed
Downcasting sans utiliser d'instance Java
Le downcasting peut également être effectué sans utiliser l'opérateur instanceof, comme indiqué dans l'exemple suivant :
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); } }Testez-le maintenant
Output:ok downcasting performed
Regardons cela de plus près, l'objet réel référencé par a est un objet de la classe Dog. Donc si nous le baissons, ce n'est pas grave. Mais que se passera-t-il si on écrit :
Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator
Comprendre l'utilisation réelle d'instanceof en Java
Voyons l'utilisation réelle du mot-clé instanceof par l'exemple donné ci-dessous.
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); } }Testez-le maintenant
Output: b method