Назад к вопросам
СБЕР
Senior
3
Что такое принцип Барбары Лисков (LSP)? Можете привести пример нарушения?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Принцип Барбары Лисков (Liskov Substitution Principle, LSP) гласит, что объекты подкласса должны быть взаимозаменяемы с объектами суперкласса без нарушения корректности программы. Иными словами, подкласс должен расширять функциональность базового класса, не изменяя его поведение.
Пример нарушения LSP:
class Rectangle {
protected int width, height;
public void setWidth(int w) { width = w; }
public void setHeight(int h) { height = h; }
public int getArea() { return width * height; }
}
class Square extends Rectangle {
@Override
public void setWidth(int w) {
width = height = w;
}
@Override
public void setHeight(int h) {
width = height = h;
}
}
Здесь Square наследует Rectangle, но изменяет поведение методов setWidth и setHeight так, что нарушается ожидание, что ширина и высота можно менять независимо. Если код работает с Rectangle и ожидает, что можно менять ширину и высоту отдельно, то при передаче Square поведение изменится, что нарушает LSP.