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

Java Methoden überschreiben: Superclass-Verhalten anpassen

Was ist Methodenüberschreibung?

Im vorherigen Kapitel haben wir über Superclasses und Subclasses gesprochen. Wenn eine Klasse eine Methode von ihrer Superclass erbt, dann besteht die Möglichkeit, die Methode zu überschreiben, vorausgesetzt, sie ist nicht als final markiert.

Der Vorteil des Überschreibens ist: die Fähigkeit, ein Verhalten zu definieren, das spezifisch für den Subclass-Typ ist. Das bedeutet, eine Subclass kann eine Elternklassenmethode basierend auf ihren Anforderungen implementieren.

In objektorientierten Begriffen bedeutet Überschreiben, die Funktionalität einer bestehenden Methode zu überschreiben.

Beispiel

class Animal {
    public void move() {
        System.out.println("Animals can move");
    }
}

class Dog extends Animal {
    public void move() {
        System.out.println("Dogs can walk and run");
    }
}

public class TestDog {
    public static void main(String args[]) {
        Animal a = new Animal(); // Animal-Referenz und -Objekt
        Animal b = new Dog();    // Animal-Referenz, aber Dog-Objekt
        a.move(); // führt die Methode in der Animal-Klasse aus
        b.move(); // führt die Methode in der Dog-Klasse aus
    }
}

Ausgabe:

Animals can move
Dogs can walk and run

Im obigen Beispiel können Sie sehen, dass obwohl b vom Typ Animal ist, die move-Methode in der Dog-Klasse ausgeführt wird. Der Grund dafür ist: Zur Kompilierzeit wird die Prüfung am Referenztyp durchgeführt. Zur Laufzeit jedoch ermittelt die JVM den Objekttyp und führt die Methode aus, die zu diesem bestimmten Objekt gehört.

Daher kompiliert das Programm im obigen Beispiel korrekt, da die Animal-Klasse die Methode move hat. Zur Laufzeit führt es die methode aus, die spezifisch für dieses Objekt ist.

Betrachten Sie das folgende Beispiel:

Beispiel: Kompilierfehler bei Zugriff auf Subclass-spezifische Methode

class Animal {
    public void move() {
        System.out.println("Animals can move");
    }
}

class Dog extends Animal {
    public void move() {
        System.out.println("Dogs can walk and run");
    }

    public void bark() {
        System.out.println("Dogs can bark");
    }
}

public class TestDog {
    public static void main(String args[]) {
        Animal a = new Animal(); // Animal-Referenz und -Objekt
        Animal b = new Dog();    // Animal-Referenz, aber Dog-Objekt
        a.move(); // führt die Methode in der Animal-Klasse aus
        b.move(); // führt die Methode in der Dog-Klasse aus
        b.bark(); // FEHLER!
    }
}

Ausgabe (Kompilierfehler):

TestDog.java:26: error: cannot find symbol
b.bark();
^
symbol: method bark()
location: variable b of type Animal
1 error

Dieses Programm wirft einen Kompilierzeitfehler, da der Referenztyp b (Animal) keine Methode mit dem Namen bark hat.

Regeln für Methodenüberschreibung

Verwendung des super-Schlüsselworts

Beim Aufrufen einer Superclass-Version einer überschriebenen Methode wird das super-Schlüsselwort verwendet.

Beispiel

class Animal {
    public void move() {
        System.out.println("Animals can move");
    }
}

class Dog extends Animal {
    public void move() {
        super.move(); // ruft die Superclass-Methode auf
        System.out.println("Dogs can walk and run");
    }
}

public class TestDog {
    public static void main(String args[]) {
        Animal b = new Dog(); // Animal-Referenz, aber Dog-Objekt
        b.move(); // führt die Methode in der Dog-Klasse aus
    }
}

Ausgabe:

Animals can move
Dogs can walk and run

Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  3. Java String length() Methode: String-Länge ermitteln (Beispiel)
  4. Java String.indexOf() meistern: Substrings finden & praktische Beispiele
  5. Java String.charAt(): Syntax, Rückgabetyp, Exceptions und praktisches Beispiel
  6. Java String compareTo() meistern: Syntax, Anwendungsfälle und praktische Beispiele
  7. Java String.contains() Methode: Substrings prüfen – praktische Beispiele
  8. Java String.endsWith(): String-Suffixe prüfen mit Beispielen
  9. Java String-Ersetzung meistern: replace(), replaceAll() und replaceFirst() erklärt
  10. Java static erklärt: Variablen, Methoden und Blöcke – Praxisbeispiele