logo

Upcasten versus downcasten in Java

Typecasting is een van de belangrijkste concepten die feitelijk betrekking heeft op de conversie van het ene datatype naar een ander datatype, impliciet of expliciet. In dit artikel wordt het concept van typecasting voor objecten besproken.
Net als de gegevenstypen kunnen de objecten ook worden getypeerd. In objecten zijn er echter slechts twee soorten objecten, namelijk een ouderobject en een onderliggend object. Daarom betekent typecasting van objecten in feite dat het ene type object (dat wil zeggen) kind of ouder is voor het andere. Er zijn twee soorten typecasting. Zij zijn:

    Upcasting: Upcasting is de typecasting van een kindobject naar een ouderobject . Upcasting kan impliciet worden gedaan. Upcasting geeft ons de flexibiliteit om toegang te krijgen tot de leden van de bovenliggende klas, maar het is niet mogelijk om met deze functie toegang te krijgen tot alle leden van de onderliggende klas. In plaats van alle leden hebben we toegang tot enkele gespecificeerde leden van de onderliggende klasse. We hebben bijvoorbeeld toegang tot de overschreven methoden. Downcasting: Op dezelfde manier betekent downcasting het typecasten van een ouderobject naar een onderliggend object . Downcasting kan niet impliciet zijn.

De volgende afbeelding illustreert het concept van upcasting en downcasting:

Upcasting versus downcasting



Voorbeeld: Laat er een ouderklas zijn. Er kunnen veel kinderen van een ouder zijn. Laten we een van de kinderen in overweging nemen. Het kind erft de eigenschappen van de ouder. Er is dus sprake van een is-een-relatie tussen kind en ouder. Daarom kan het kind impliciet zijn verbijsterd aan de ouder. Een ouder kan echter wel of niet de eigendommen van het kind erven. We kunnen echter met geweld een ouder casten voor een kind dat bekend staat als neerhalen . Nadat we dit type casting expliciet hebben gedefinieerd, controleert de compiler op de achtergrond of dit type casting mogelijk is of niet. Als dit niet mogelijk is, genereert de compiler een ClassCastException .
Laten we de volgende code begrijpen om het verschil te begrijpen:

Java

Hoe geblokkeerde nummers op Android te vinden




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

string naar int-conversie in Java
>

>

Uitvoer

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

Een illustratief figuur van het bovenstaande programma:

Upcasting versus downcasting1

Uit het bovenstaande voorbeeld kunnen we de volgende punten waarnemen:

    Syntaxis van upcasting:
Parent p = new Child();>
  1. Het upcasten gebeurt intern en als gevolg van het upcasten heeft het object alleen toegang tot leden van de bovenliggende klasse en gespecificeerde leden van de onderliggende klasse (overschreven methoden, enz.), maar niet tot alle leden.
// This variable is not // accessible p.id = 1;>
    Syntaxis van downcasting:
Child c = (Child)p;>
  1. Het downcasten moet extern worden gedaan en door het downcasten kan een onderliggend object de eigenschappen van het bovenliggende object verwerven.
c.name = p.name; i.e., c.name = 'techcodeview.com'>