Junior — Middle
106
Масъулон мешавед, ки намунаеро нишон медиҳад, ки принсипи ивазкунии Лисков дар барномасозии объектӣ чӣ гуна аст?
Ҷавоб аз 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, так как не умеет летать
}
Так объекты подклассов можно использовать без неожиданного поведения.