Heim >Java >javaLernprogramm >Verwenden einer Superklassenreferenz für ein Unterklassenobjekt

Verwenden einer Superklassenreferenz für ein Unterklassenobjekt

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-12 06:08:02744Durchsuche

Using a Superclass Reference for a Subclass Object

Stellen Sie sich ein Szenario vor, in dem wir eine Klasse namens User erstellen und dann eine Unterklasse namens Employee 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 User.


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. Daher 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 User 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.

Dann mit 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 Methode getUserSalary() 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 dieser 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 ein Unterklassenobjekt Employee mit einer Superklassenreferenz Benutzer zu referenzieren, funktioniert es ohne manuelles Casting nicht! Dies erfordert ein explizites Casting, 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 handelt es sich beim Upcasting um 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();.

gemacht

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! :)

Das obige ist der detaillierte Inhalt vonVerwenden einer Superklassenreferenz für ein Unterklassenobjekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn