Sobes.tech
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.