Junior — Middle
¿Puedes dar un ejemplo de una situación en la que se viola el principio de Liskov de Solid?
sobes.tech AI
Respuesta de la IA
Принцип Лисков (Liskov Substitution Principle) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами базового класса без изменения корректности программы.
Пример нарушения:
Представим, что есть базовый класс Bird с методом fly(). Подкласс Penguin наследует Bird, но пингвины не умеют летать. Если в коде, где ожидается любой Bird, вызывается fly(), то для Penguin это приведёт к ошибке или неправильному поведению.
class Bird {
void fly() {
print('Летит');
}
}
class Penguin extends Bird {
@override
void fly() {
throw Exception('Пингвины не умеют летать');
}
}
void makeBirdFly(Bird bird) {
bird.fly();
}
void main() {
Bird sparrow = Bird();
Bird penguin = Penguin();
makeBirdFly(sparrow); // Работает
makeBirdFly(penguin); // Ошибка, нарушение принципа Лисков
}
В этом случае Penguin нарушает принцип Лисков, так как не может заменить Bird без изменения поведения.