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.
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. Konsistenz der Methodensignatur:
2. Rückgabetyp und kovariante Rückgabetypen:
3. Zugriffsmodifikatoren:
Öffentlich > Geschützt > Standard (Paket-Privat) > Privat
4. Sichtbarkeit der Methode:
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.
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.
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.
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.
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!