logo

Upcasting vs Downcasting en Java

Le transtypage est l'un des concepts les plus importants qui traite essentiellement de la conversion d'un type de données en un autre type de données, implicitement ou explicitement. Dans cet article, le concept de transtypage pour les objets est abordé.
Tout comme les types de données, les objets peuvent également être transtypés. Cependant, dans les objets, il n’existe que deux types d’objets, à savoir l’objet parent et l’objet enfant. Par conséquent, le transtypage d'objets signifie essentiellement qu'un type d'objet (c'est-à-dire) est enfant ou parent à un autre. Il existe deux types de transtypage. Ils sont:

    Upcasting : l'upcasting est le transtypage d'un objet enfant à un objet parent . La conversion ascendante peut être effectuée implicitement. La diffusion ascendante nous donne la flexibilité d'accéder aux membres de la classe parent, mais il n'est pas possible d'accéder à tous les membres de la classe enfant à l'aide de cette fonctionnalité. Au lieu de tous les membres, nous pouvons accéder à certains membres spécifiés de la classe enfant. Par exemple, nous pouvons accéder aux méthodes remplacées. Downcasting : de même, le downcasting signifie le transtypage d'un objet parent à un objet enfant . Le downcasting ne peut pas être implicite.

L'image suivante illustre le concept de transtypage ascendant et descendant :

Upcasting-Vs-Downcasting



tableau de tri Java

Exemple: Qu'il y ait une classe parent. Il peut y avoir plusieurs enfants d'un parent. Prenons en considération l’un des enfants. L'enfant hérite des propriétés du parent. Il existe donc une relation entre l’enfant et le parent. L’enfant peut donc être implicitement transtypé au parent. Cependant, un parent peut ou non hériter des propriétés de l’enfant. Cependant, nous pouvons forcer le transfert d'un parent vers un enfant, appelé downcasting . Après avoir défini explicitement ce type de casting, le compilateur vérifie en arrière-plan si ce type de casting est possible ou non. Si ce n'est pas possible, le compilateur renvoie une ClassCastException .
Comprenons le code suivant pour comprendre la différence :

Java


centrer une image en CSS



// Java program to demonstrate> // Upcasting Vs Downcasting> // Parent class> class> Parent {> >String name;> >// A method which prints the> >// signature of the parent class> >void> method()> >{> >System.out.println(>'Method from Parent'>);> >}> }> // Child class> class> Child>extends> Parent {> >int> id;> >// Overriding the parent method> >// to print the signature of the> >// child class> >@Override> void> method()> >{> >System.out.println(>'Method from Child'>);> >}> }> // Demo class to see the difference> // between upcasting and downcasting> public> class> GFG {> >// Driver code> >public> static> void> main(String[] args)> >{> >// Upcasting> >Parent p =>new> Child();> >p.name =>'techcodeview.com'>;> >//Printing the parentclass name> >System.out.println(p.name);> >//parent class method is overridden method hence this will be executed> >p.method();> >// Trying to Downcasting Implicitly> >// Child c = new Parent(); ->erreur de compilation> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }>

>

mon flixeur

comment convertir une chaîne en int java
>

Sortir

techcodeview.com Method from Child techcodeview.com 1 Method from Child>

Une figure illustrative du programme ci-dessus :

Upcasting-Vs-Downcasting1

À partir de l’exemple ci-dessus, nous pouvons observer les points suivants :

    Syntaxe de la diffusion ascendante :
Parent p = new Child();>
  1. La conversion ascendante sera effectuée en interne et, en raison de la conversion ascendante, l'objet est autorisé à accéder uniquement aux membres de la classe parent et aux membres spécifiés de la classe enfant (méthodes remplacées, etc.), mais pas à tous les membres.
// This variable is not // accessible p.id = 1;>
    Syntaxe du downcasting :
Child c = (Child)p;>
  1. Le downcasting doit être effectué en externe et, grâce au downcasting, un objet enfant peut acquérir les propriétés de l'objet parent.
c.name = p.name; i.e., c.name = 'techcodeview.com'>