Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Polymorphie in Java: Umfassender Leitfaden mit praktischen Beispielen

Was ist Polymorphie in Java?

Polymorphie ist ein Kernkonzept in Javas objektorientierter Programmierung (OOP). Sie tritt auf, wenn Klassen durch Vererbung verknüpft sind und ein einzelnes Interface unterschiedliche zugrundeliegende Formen darstellen kann. Das Ergebnis ist, dass ein Methodenaufruf je nach tatsächlichem Objekttyp zur Laufzeit unterschiedliche Implementierungen aufrufen kann.

Denken Sie an ein Smartphone, das per Sprachanruf, Text, Bild oder E-Mail kommunizieren kann. Das Ziel – Kommunikation – ist dasselbe, aber jeder Modus verhält sich anders. Das ist Polymorphie im Alltag.

Was Sie lernen werden

Java Polymorphie in OOP: Ein Beispiel

Betrachten Sie eine Basisklasse Account, die deposit() und withdraw() anbietet. Zwei Unterklassen, SavingsAccount und CheckingAccount, erben diese Methoden unverändert, da die Operationen identisch sind.

Polymorphie in Java: Umfassender Leitfaden mit praktischen Beispielen

Anpassung an sich ändernde Anforderungen

Wenn eine neue Funktion – wie eine Überziehungsmöglichkeit – erforderlich ist, kann eine PrivilegedAccount-Unterklasse withdraw() überschreiben, um die neue Logik bereitzustellen, ohne bestehende Unterklassen zu berühren. Dies demonstriert den Wartbarkeitsvorteil der Polymorphie.

Polymorphie in Java: Umfassender Leitfaden mit praktischen Beispielen

Methodenüberschreibung in Java

Überschreiben tritt auf, wenn eine Unterklasse ihre eigene Implementierung einer bereits in der Superklasse definierten Methode bereitstellt. Die Methodensignatur (Name, Parameter, Rückgabetyp) muss exakt übereinstimmen.

Wichtige Regeln

Beispiel:

class Doctor {
    public void treatPatient() {
        // gemeinsame Behandlungslogik
    }
}
class Surgeon extends Doctor {
    @Override
    public void treatPatient() {
        // spezialisierte chirurgische Behandlung
    }
}
public class Run {
    public static void main(String[] args) {
        Doctor doctor = new Doctor();
        doctor.treatPatient(); // führt Doctor.treatPatient() aus
        Surgeon surgeon = new Surgeon();
        surgeon.treatPatient(); // führt Surgeon.treatPatient() aus
    }
}

Überladen vs. Überschreiben

MethodenüberladenMethodenüberschreiben
Derselbe Klasse, gleicher Name, andere Parameterliste. Superklassenmethode in Unterklasse mit identischer Signatur neu definiert.
Beispiel:
void sum(int a, int b);
void sum(int a, int b, int c);
void sum(float a, double b);
Beispiel:
class X { int sum() { ... } }
class Y extends X {
    @Override int sum() { ... }
}

Dynamische Polymorphie (Laufzeit)

Wenn eine Superklassenreferenz auf ein Unterklassenobjekt zeigt, löst die JVM den Methodenaufruf zur Laufzeit auf. Das ist echte Polymorphie in Aktion.

Doctor doc = new Surgeon();
doc.treatPatient(); // Führt Surgeon.treatPatient() aus

Die tatsächlich aufgerufene Methode hängt vom Laufzeittyp des Objekts ab, nicht vom Referenztyp.

Statische vs. Dynamische Polymorphie

Statische Polymorphie (Überladen) wird zur Kompilierzeit aufgelöst, während dynamische Polymorphie (Überschreiben) zur Laufzeit aufgelöst wird.

Statische PolymorphieDynamische Polymorphie
Methodenüberladen; Compile-Time Binding. Methodenüberschreiben; Runtime Binding.
Beispiel:
void sum(int a, int b);
void sum(float a, double b);
Beispiel:
Doctor d = new Surgeon();
d.treatPatient();

Verwendung des super-Schlüsselworts

Wenn eine Unterklasse eine Superklassenmethode erweitern muss, ruft super die Elternimplementierung auf, bevor sie ihre eigene Logik hinzufügt.

class Surgeon extends Doctor {
    @Override
    public void treatPatient() {
        super.treatPatient(); // Basismethode
        // chirurgenspezifische Logik
    }
}

Ebenso kann super auf geschützte oder öffentliche Felder der Superklasse zugreifen.

Praxisbeispiel: Vererbung, Polymorphie & Super

Kopieren Sie den folgenden Code in Ihre IDE und beobachten Sie die Ausgabe.

public class Test {
    public static void main(String[] args) {
        X x = new X();
        Y y = new Y();
        y.m2();
        // Einkommentieren, um Vererbungseffekte zu sehen
        // x.m1();
        // y.m1();
        // x = y; // Elternreferenz auf Kindobjekt
        // x.m1();
        // y.a = 10; // Fehler: a ist privat
    }
}
class X {
    private int a;
    int b;
    public void m1() {
        System.out.println("This is method m1 of class X");
    }
}
class Y extends X {
    int c;
    @Override
    public void m1() {
        System.out.println("This is method m1 of class Y");
    }
    public void m2() {
        super.m1();
        System.out.println("This is method m2 of class Y");
    }
}

Wichtigste Erkenntnisse

Java

  1. Java-Polymorphie meistern: Konzepte, Beispiele und Best Practices
  2. C# Abstrakte Klassen: Praktisches Tutorial mit Code-Beispielen
  3. C# Interfaces verstehen: Definition, Beispiel und praktische Anwendung
  4. Java String length() Methode: String-Länge ermitteln (Beispiel)
  5. Java String.charAt(): Syntax, Rückgabetyp, Exceptions und praktisches Beispiel
  6. Java String.contains() Methode: Substrings prüfen – praktische Beispiele
  7. Java String.endsWith(): String-Suffixe prüfen mit Beispielen
  8. Java static erklärt: Variablen, Methoden und Blöcke – Praxisbeispiele
  9. Interface vs. Abstrakte Klasse in Java: Die richtige Abstraktion wählen
  10. Dateien in Java mit BufferedReader lesen – Praktischer Leitfaden mit Beispielen