Sobes.tech
Junior — Middle

Können Sie ein Beispiel geben, das das Liskov-Substitutionsprinzip in der objektorientierten Programmierung veranschaulicht?

sobes.tech KI

Antwort von AI

Das Liskov-Substitutionsprinzip (Liskov Substitution Principle, LSP) besagt, dass Objekte einer Unterklasse austauschbar mit Objekten der Oberklasse sein sollten, ohne die Korrektheit des Programms zu verletzen.

Beispiel:

// Oberklasse
class Bird {
    void fly() {
        System.out.println("Vogel fliegt");
    }
}

// Unterklasse, die das Verhalten korrekt erweitert
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Spatz fliegt");
    }
}

// Verletzung von LSP
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Strauß kann nicht fliegen");
    }
}

// Verwendung
void makeBirdFly(Bird bird) {
    bird.fly(); // Es wird erwartet, dass der Vogel fliegen kann
}

// Wenn Ostrich übergeben wird, wirft die Methode fly() eine Ausnahme, was LSP verletzt.

Um LSP einzuhalten, ist es besser, die Hierarchie zu trennen:

interface Flyable {
    void fly();
}

class Bird {}

class Sparrow extends Bird implements Flyable {
    public void fly() { System.out.println("Spatz fliegt"); }
}

class Ostrich extends Bird {
    // Implementiert nicht Flyable, da er nicht fliegen kann
}

Auf diese Weise können Objekte der Unterklassen ohne unerwartetes Verhalten verwendet werden.