logo

Upcasting vs Downcasting Java

Tipa apraide ir viens no svarīgākajiem jēdzieniem, kas būtībā attiecas uz viena datu tipa pārveidošanu citā datu tipā netieši vai tieši. Šajā rakstā ir apskatīts objektu tipogrāfijas jēdziens.
Tāpat kā datu tipus, objektus var arī pārrakstīt. Tomēr objektos ir tikai divu veidu objekti, t.i., vecākais objekts un bērna objekts. Tāpēc objektu tipizēšana būtībā nozīmē, ka viena veida objektu (t.i.) bērns vai vecāks citam. Ir divu veidu tipogrāfija. Viņi ir:

    Upcasting: Upcasting ir tipa apraide no bērna objekta priekšmeta . Apraidi var veikt netieši. Augšupielāde sniedz mums elastību, lai piekļūtu vecākklases dalībniekiem, taču, izmantojot šo funkciju, nav iespējams piekļūt visiem pakārtotajiem klases dalībniekiem. Visu dalībnieku vietā mēs varam piekļūt dažiem norādītajiem bērnu klases dalībniekiem. Piemēram, mēs varam piekļūt ignorētajām metodēm. Samazināšana: līdzīgi samazināšana nozīmē a tipa nomaiņu vecāks iebilst pret bērna objektu . Samazināšana nevar būt netieša.

Šis attēls ilustrē paaugstināšanas un lejupvērsšanas jēdzienu:

repl java

Upcasting-vs-downcasting



Piemērs: Lai ir vecāku klase. Vienam vecākam var būt daudz bērnu. Ņemsim vērā vienu no bērniem. Bērns manto vecāku īpašības. Tāpēc starp bērnu un vecāku pastāv attiecības. Tāpēc bērns var būt netieši upcasted vecākam. Tomēr vecāks var vai nevar mantot bērna īpašumus. Tomēr mēs varam piespiedu kārtā nodot vecāku bērnam, kas ir pazīstams kā pazemināšana . Pēc tam, kad esam skaidri definējuši šāda veida apraidi, kompilators fonā pārbauda, ​​vai šāda veida liešana ir iespējama. Ja tas nav iespējams, kompilators izmanto ClassCastException .
Lai saprastu atšķirību, sapratīsim šo kodu:

Java




// 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(); ->kompilēšanas laika kļūda> >// Downcasting Explicitly> >Child c = (Child)p;> >c.id =>1>;> >System.out.println(c.name);> >System.out.println(c.id);> >c.method();> >}> }>

kartes java
>

>

Izvade

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

Iepriekš minētās programmas ilustratīvs attēls:

Augšupielāde-pret-downcasting1

No iepriekš minētā piemēra mēs varam novērot šādus punktus:

mans flikseris
    Augšupielādes sintakse:
Parent p = new Child();>
  1. Augšupielāde tiks veikta iekšēji, un augšuplādes dēļ objektam ir atļauts piekļūt tikai vecākklases dalībniekiem un atvasinātās klases norādītajiem dalībniekiem (ignorētās metodes utt.), bet ne visiem dalībniekiem.
// This variable is not // accessible p.id = 1;>
    Nolaišanas sintakse:
Child c = (Child)p;>
  1. Samazināšana ir jāveic ārēji, un pazemināšanas dēļ pakārtotais objekts var iegūt vecākobjekta īpašības.
c.name = p.name; i.e., c.name = 'techcodeview.com'>