„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Verwenden einer Superklassenreferenz für ein Unterklassenobjekt

Verwenden einer Superklassenreferenz für ein Unterklassenobjekt

Veröffentlicht am 19.11.2024
Durchsuche:436

Using a Superclass Reference for a Subclass Object

Stellen Sie sich ein Szenario vor, in dem wir eine Klasse namens Benutzer erstellen und dann eine Unterklasse namens Mitarbeiter erstellen, die den Benutzer erweitert.
Normalerweise erstellen wir eine Instanz von Benutzer mit:

User user = new User();

Hier ist User der Typ der Variablen user, user ist die Variable, die die Instanz der Klasse enthält, und new User() erstellt eine neue Instanz von User.
Einfach ausgedrückt ist der Benutzer eine Instanz von Benutzer.


Was aber, wenn die Oberklasse Benutzer Methoden verwenden muss, die in ihrer Unterklasse Mitarbeiter definiert sind? Kann das passieren?
Die kurze Antwort lautet ja, aber nur für überschriebene Methoden (Methoden, die sowohl in der Oberklasse als auch in der Unterklasse vorhanden sind). Dies ermöglicht Polymorphismus.
Da die Beziehung in der Vererbung eine "ist-ein"-Beziehung ist, ist Mitarbeiter ein Benutzer. also hindert User nichts daran, einen Verweis auf eine Instanz seiner Unterklasse Employee zu halten, solange es sich um einen kompatiblen Typ handelt.

Dies geschieht wie folgt:

User user = new Employee();

Nehmen wir an, die Klasse Benutzer hat zwei Methoden:

  1. getUserName()
  2. getUserSalary().

während die Employee-Klasse über eine zusätzliche Methode namens getEmployeeInformation() verfügt und die Methode getUserSalary() überschreibt.

THen with User user = new Employee();:

  1. user.getUserName() funktioniert, wie in der User-Klasse definiert.

  2. user.getUserSalary() funktioniert auch, aber die Ausgabe erfolgt von der überschriebenen getUserSalary()-Methode in der Klasse Employee, nicht von der in User . Dies ist die Essenz des Polymorphismus.

  3. user.getEmployeeInformation() funktioniert nicht. Es wird ein Kompilierungsfehler ausgegeben, da es spezifisch für die Klasse Employee ist.

Ein Kompilierungsfehler tritt auf, wenn der Compiler Probleme wie Syntaxfehler, Typkonflikte oder andere Verstöße findet, die eine erfolgreiche Codekompilierung verhindern.

Wenn wir versuchen, das Gegenteil zu tun und auf ein Unterklassenobjekt Employee mit einer Oberklassenreferenz User zu verweisen, funktioniert es ohne manuelle Umwandlung nicht! Dies erfordert eine explizite Umwandlung, da Benutzer nicht unbedingt ein Mitarbeiter ist.


Upcasting VS. Niedergeschlagen

Nachdem wir dies auf einfache Weise anhand eines einfachen Beispiels erklärt haben, konzentrieren wir uns auf die Begriffe.

"Superklassenverweis auf Unterklassenobjekt" wird normalerweise als Upcasting bezeichnet. Einfach ausgedrückt ist Upcasting die Typumwandlung eines untergeordneten Objekts in ein übergeordnetes Objekt, und dies geschieht implizit (was bedeutet, dass der Compiler es automatisch verarbeitet, sodass wir keine spezielle Umwandlungssyntax benötigen). Es ist so, als hätten wir User user = new Employee();.

Was ist mit Downcasting?

Downcasting ist das genaue Gegenteil von Upcasting.

Erinnern Sie sich, als wir sagten, dass das Erstellen einer Employee-Referenz aus einer Benutzerinstanz ungültig ist? Dies wird als Downcasting bezeichnet und muss explizit mithilfe der Casting-Syntax erfolgen. Während Upcasting sehr sicher ist, birgt Downcasting Risiken. Das bedeutet nicht, dass es nicht nützlich ist, aber es muss mit Vorsicht verwendet werden.

Ich werde nicht zu sehr ins Detail auf Downcasting eingehen, da sich dieser Artikel auf Upcasting konzentriert, aber der entscheidende Punkt ist, den Hauptunterschied zwischen Downcasting und Upcasting aufzuzeigen.


Und das ist Schluss! :)

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/khaledsalshibani/using-a-superclass-reference-for-a-subclass-object-22ga?1 Bei Verstößen wenden Sie sich zum Löschen bitte an [email protected] Es
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3