Heim  >  Artikel  >  Java  >  Polymorphismus: Überschreiben der Dekodierungsmethode in Java

Polymorphismus: Überschreiben der Dekodierungsmethode in Java

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-02 18:14:02932Durchsuche

Polymorphism: Decoding Method Overriding in Java

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

  1. Dynamische Methodenauflösung: Überschreibende Methoden werden zur Laufzeit basierend auf dem Objekttyp aufgelöst, was eine größere Flexibilität bietet.
  2. 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!

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