logo

Upcasting vs Downcasting în Java

Typecastingul este unul dintre cele mai importante concepte care se ocupă practic de conversia unui tip de date într-un alt tip de date implicit sau explicit. În acest articol, este discutat conceptul de tipar pentru obiecte.
La fel ca și tipurile de date, și obiectele pot fi tipificate. Cu toate acestea, în obiecte, există doar două tipuri de obiecte, adică obiectul părinte și obiectul copil. Prin urmare, tipărirea obiectelor înseamnă practic că un tip de obiect (adică) copil sau părinte la altul. Există două tipuri de tipare. Sunt:

    Upcasting: Upcasting este tipul a unui obiect copil la un obiect părinte . Upcasting-ul se poate face implicit. Upcasting ne oferă flexibilitatea de a accesa membrii clasei părinte, dar nu este posibil să accesăm toți membrii clasei copii folosind această funcție. În loc de toți membrii, putem accesa câțiva membri specificați ai clasei copil. De exemplu, putem accesa metodele suprascrise. Downcasting: În mod similar, downcasting înseamnă tipărirea unui obiect părinte la un obiect copil . Reducerea nu poate fi implicită.

Următoarea imagine ilustrează conceptul de upcasting și downcasting:

Upcasting-Vs-Downcasting



Exemplu: Să existe o clasă de părinți. Pot fi mulți copii ai unui părinte. Să luăm în considerare unul dintre copii. Copilul moștenește proprietățile părintelui. Prin urmare, există o relație este-o între copil și părinte. Prin urmare, copilul poate fi implicit upcasted către părinte. Cu toate acestea, un părinte poate sau nu să moștenească proprietățile copilului. Cu toate acestea, putem arunca cu forță un părinte la un copil care este cunoscut ca doborâtor . După ce definim acest tip de casting în mod explicit, compilatorul verifică în fundal dacă acest tip de casting este posibil sau nu. Dacă nu este posibil, compilatorul lansează o ClassCastException.
Să înțelegem următorul cod pentru a înțelege diferența:

ștergeți memoria cache npm

Java

c#




// 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(); ->eroare de timp de compilare> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }>

>

flixerul meu

>

Ieșire

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

O figură ilustrativă a programului de mai sus:

Upcasting-vs-Downcasting1

Din exemplul de mai sus putem observa următoarele puncte:

    Sintaxa upcasting-ului:
Parent p = new Child();>
  1. Upcasting-ul se va face intern și datorită upcasting-ului obiectului i se permite să acceseze numai membrii clasei părinte și membrii specificați ai clasei copil (metode suprascrise etc.), dar nu toți membrii.
// This variable is not // accessible p.id = 1;>
    Sintaxa downcasting:
Child c = (Child)p;>
  1. Downcasting-ul trebuie să se facă extern și, datorită downcasting-ului, un obiect copil poate dobândi proprietățile obiectului părinte.
c.name = p.name; i.e., c.name = 'techcodeview.com'>