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.