logo

Upcasting vs. Downcasting in Java

Typecasting ist eines der wichtigsten Konzepte, das sich im Wesentlichen mit der impliziten oder expliziten Konvertierung eines Datentyps in einen anderen Datentyp befasst. In diesem Artikel wird das Konzept der Typumwandlung für Objekte diskutiert.
Ebenso wie die Datentypen können auch die Objekte typisiert werden. Bei Objekten gibt es jedoch nur zwei Arten von Objekten, nämlich übergeordnete Objekte und untergeordnete Objekte. Daher bedeutet die Typumwandlung von Objekten grundsätzlich, dass ein Objekttyp (d. h.) einem anderen Objekttyp untergeordnet oder übergeordnet wird. Es gibt zwei Arten der Typisierung. Sie sind:

    Upcasting: Upcasting ist die Typisierung eines untergeordneten Objekts zu einem übergeordneten Objekt . Upcasting kann implizit erfolgen. Upcasting gibt uns die Flexibilität, auf die Mitglieder der übergeordneten Klasse zuzugreifen, es ist jedoch nicht möglich, mit dieser Funktion auf alle Mitglieder der untergeordneten Klasse zuzugreifen. Anstelle aller Mitglieder können wir auf einige angegebene Mitglieder der untergeordneten Klasse zugreifen. Beispielsweise können wir auf die überschriebenen Methoden zugreifen. Downcasting: In ähnlicher Weise bedeutet Downcasting die Typisierung von a übergeordnetes Objekt zu einem untergeordneten Objekt . Downcasting kann nicht implizit erfolgen.

Das folgende Bild veranschaulicht das Konzept von Upcasting und Downcasting:

Upcasting vs. Downcasting



Beispiel: Lass es eine übergeordnete Klasse geben. Es kann viele Kinder eines Elternteils geben. Nehmen wir eines der Kinder in Betracht. Das Kind erbt die Eigenschaften des Elternteils. Es besteht also eine Ist-Ein-Beziehung zwischen Kind und Eltern. Daher kann das Kind implizit sein upcasted an die Eltern. Allerdings kann ein Elternteil die Eigenschaften des Kindes erben oder auch nicht. Wir können jedoch ein Elternteil zwangsweise einem Kind zuordnen, das als bekannt ist niedergeschlagen . Nachdem wir diese Art der Umwandlung explizit definiert haben, prüft der Compiler im Hintergrund, ob diese Art der Umwandlung möglich ist oder nicht. Wenn dies nicht möglich ist, löst der Compiler eine ClassCastException aus.
Lassen Sie uns den folgenden Code verstehen, um den Unterschied zu verstehen:

Java




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

>

>

Ausgabe

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

Eine veranschaulichende Abbildung des obigen Programms:

Upcasting-vs-Downcasting1

Aus dem obigen Beispiel können wir die folgenden Punkte beobachten:

    Upcasting-Syntax:
Parent p = new Child();>
  1. Das Upcasting erfolgt intern und aufgrund des Upcastings darf das Objekt nur auf Mitglieder der übergeordneten Klasse und bestimmte Mitglieder der untergeordneten Klasse zugreifen (überschriebene Methoden usw.), nicht jedoch auf alle Mitglieder.
// This variable is not // accessible p.id = 1;>
    Syntax des Downcastings:
Child c = (Child)p;>
  1. Das Downcasting muss extern durchgeführt werden und durch das Downcasting kann ein untergeordnetes Objekt die Eigenschaften des übergeordneten Objekts erwerben.
c.name = p.name; i.e., c.name = 'techcodeview.com'>