Methodenüberschreibung ist eines der Kernkonzepte des Polymorphismus in Java und ermöglicht es einer Unterklasse, eine spezifische Implementierung einer bereits in ihrer Oberklasse definierten Methode bereitzustellen. Diese leistungsstarke Funktion trägt dazu bei, Laufzeitpolymorphismus zu erreichen und ermöglicht den dynamischen Methodenversand. In diesem Beitrag werden wir uns mit den wesentlichen Konzepten, Regeln und Beispielen aus der Praxis befassen, um das Methodenüberschreiben gründlich zu verstehen.
Was ist Methodenüberschreibung?
Methodenüberschreibungen treten auf, wenn eine Unterklasse eine Methode aus ihrer Oberklasse mit der gleichen Methodensignatur (gleicher Name, gleiche Parameter und Rückgabetyp oder ein kovarianter Rückgabetyp) neu definiert. Im Gegensatz zur Methodenüberladung, die zur Kompilierzeit aufgelöst wird, wird durch das Überschreiben von Methoden ein Laufzeitpolymorphismus erreicht, bei dem die tatsächlich aufgerufene Methode vom Laufzeittyp des Objekts abhängt.
1. Regeln zum Überschreiben der Methode
1. Konsistenz der Methodensignatur:
- Der Methodenname und die Parameterliste in der Unterklasse müssen genau mit der Methode in der Oberklasse übereinstimmen.
2. Rückgabetyp und kovariante Rückgabetypen:
- Der Rückgabetyp muss entweder derselbe oder ein kovarianter Typ (ein Untertyp des ursprünglichen Rückgabetyps in der Oberklasse) sein.
3. Zugriffsmodifikatoren:
- Eine Methode in einer Unterklasse kann keine restriktivere Zugriffsebene haben als die Methode in der Oberklasse (z. B. wenn die Methode der Oberklasse geschützt ist, kann die Unterklasse sie nicht privat machen).
Öffentlich > Geschützt > Standard (Paket-Privat) > Privat
4. Sichtbarkeit der Methode:
- Private Methoden können nicht überschrieben werden. Stattdessen werden sie bei einer Neudefinition in der Unterklasse als völlig neue Methoden behandelt.
Beispiel: Grundlegende Methodenüberschreibung
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
In MethodOverridingParent können nur display() und getCount() von Unterklassen überschrieben werden, da auf sie über die übergeordnete Klasse hinaus zugegriffen werden kann. Allerdings ist getName() privat und kann daher nicht überschrieben werden, da es nicht von Unterklassen geerbt wird.
2. Methodenüberschreibung in der untergeordneten Klasse
package oops.polymorphism; public class MethodOverridingChild extends MethodOverridingParent { // Access Level Increased; Default -> Protected @Override protected void display() { System.out.println("Child Method Called"); } public static void main(String[] args) { // Calling Parent Class Method MethodOverridingParent parent = new MethodOverridingParent(); parent.display(); // Output: Parent Method Called // Calling Child Class Overridden Method - Runtime Polymorphism MethodOverridingParent child = new MethodOverridingChild(); child.display(); // Output: Child Method Called } }
Erklärung: Da display() in der Unterklasse MethodOverridingChild überschrieben wird, ruft der Aufruf von display() auf einer MethodOverridingChild-Instanz die Version des Kindes auf. Dies ist Laufzeitpolymorphismus in Aktion.
3. Kovariante Rückgabetypen: Ein praktisches Beispiel
Java unterstützt kovariante Rückgabetypen und ermöglicht der Unterklasse, einen Typ zurückzugeben, der spezifischer ist als der Rückgabetyp der Oberklasse. Dieser Ansatz folgt dem Liskov-Substitutionsprinzip in den SOLID-Prinzipien und erhöht so die Codeflexibilität.
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
Erklärung: In CovariantReturnType überschreibt getCount() die Methode des übergeordneten Elements, indem es eine Ganzzahl, einen Untertyp von Number, zurückgibt, was kovariante Rückgabetypen demonstriert. Die Methode bleibt öffentlich, da Java verlangt, dass die Zugriffsebene einer überschriebenen Methode nicht reduziert werden kann.
Methodenüberschreibung vs. Methodenüberladung
- Methodenüberschreibung ermöglicht dynamischen Polymorphismus und arbeitet in Vererbungshierarchien.
- Methodenüberladung ist eine Form des statischen Polymorphismus, der innerhalb derselben Klasse durch unterschiedliche Parametertypen oder -nummern erreicht wird.
Wann das Überschreiben von Methoden verwendet werden sollte
- Dynamische Methodenauflösung: Überschreibende Methoden werden zur Laufzeit basierend auf dem Objekttyp aufgelöst, was eine größere Flexibilität bietet.
- Verhalten erweitern: Unterklassen können die Funktionalität von Methoden der Oberklasse ändern oder erweitern.
Fazit
Durch das Verständnis und die Anwendung von Methodenüberschreibung können wir flexiblere, wiederverwendbare und polymorphe Java-Anwendungen erstellen, die den Prinzipien der objektorientierten Programmierung entsprechen.
Verwandte Beiträge
Java-Grundlagen
Array Interview Essentials
Java Memory Essentials
Java Keywords Essentials
Collections Framework Essentials
Viel Spaß beim Programmieren!
Das obige ist der detaillierte Inhalt vonPolymorphismus: Überschreiben der Dekodierungsmethode in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

In dem Artikel werden Maven und Gradle für Java -Projektmanagement, Aufbau von Automatisierung und Abhängigkeitslösung erörtert, die ihre Ansätze und Optimierungsstrategien vergleichen.

In dem Artikel werden benutzerdefinierte Java -Bibliotheken (JAR -Dateien) mit ordnungsgemäßem Versioning- und Abhängigkeitsmanagement erstellt und verwendet, wobei Tools wie Maven und Gradle verwendet werden.

In dem Artikel wird in der Implementierung von mehrstufigem Caching in Java mithilfe von Koffein- und Guava-Cache zur Verbesserung der Anwendungsleistung erläutert. Es deckt die Einrichtungs-, Integrations- und Leistungsvorteile sowie die Bestrafung des Konfigurations- und Räumungsrichtlinienmanagements ab

In dem Artikel werden mit JPA für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden erläutert. Es deckt Setup, Entity -Mapping und Best Practices zur Optimierung der Leistung ab und hebt potenzielle Fallstricke hervor. [159 Charaktere]

Mit der Klassenbelastung von Java wird das Laden, Verknüpfen und Initialisieren von Klassen mithilfe eines hierarchischen Systems mit Bootstrap-, Erweiterungs- und Anwendungsklassenloadern umfasst. Das übergeordnete Delegationsmodell stellt sicher


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Sicherer Prüfungsbrowser
Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

SublimeText3 Englische Version
Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)