Back to questions
Junior — Middle
80
Можете привести пример, демонстрирующий принцип подстановки Лисков в объектно-ориентированном программировании?
Answer from AI
sobes.tech AI
Принцип подстановки Лисков (Liskov Substitution Principle, LSP) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами суперкласса без нарушения корректности программы.
Пример:
// Суперкласс
class Bird {
void fly() {
System.out.println("Птица летит");
}
}
// Подкласс, корректно расширяющий поведение
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Воробей летит");
}
}
// Нарушение LSP
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Страус не умеет летать");
}
}
// Использование
void makeBirdFly(Bird bird) {
bird.fly(); // Ожидается, что птица может летать
}
// Если передать Ostrich, метод fly() выбросит исключение, нарушая LSP.
Чтобы соблюдать LSP, лучше разделить иерархию:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Воробей летит"); }
}
class Ostrich extends Bird {
// Не реализует Flyable, так как не умеет летать
}
Так объекты подклассов можно использовать без неожиданного поведения.