Junior — Middle
Tudna példát mondani, amely bemutatja a Liskov-helyettesítési elvet az objektum-orientált programozásban?
sobes.tech MI
Válasz az MI-től
A Liskov-helyettesítési elv (Liskov Substitution Principle, LSP) kimondja, hogy az alosztályok objektumai helyettesíthetik a szuperosztályok objektumait anélkül, hogy a program helyességét sértenék.
Példa:
// Szuperosztály
class Bird {
void fly() {
System.out.println("Madár repül");
}
}
// Helyesen kiterjesztő alosztály
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Veréb repül");
}
}
// LSP megsértése
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Strucc nem tud repülni");
}
}
// Használat
void makeBirdFly(Bird bird) {
bird.fly(); // Elvárás, hogy a madár repüljön
}
// Ha Ostrich-et adunk át, a fly() kivételt dob, megsértve az LSP-t.
Az LSP betartásához jobb az öröklődési hierarchiát szétválasztani:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Veréb repül"); }
}
class Ostrich extends Bird {
// Nem valósítja meg a Flyable-t, mivel nem tud repülni
}
Így az alosztályok objektumai váratlan viselkedés nélkül használhatók.