Буква L означает «Принцип подстановки Барбары Лисков» («Liskov Substitution Principle» или «LSP»). И означает что должна быть возможность вместо базового (родительского) типа (класса) подставить любой его подтип (класс-наследник), при этом работа программы не должна измениться.
Другими словами: если в коде программы Базовый класс заменить на его Наследника, то программа должна работать, так как в Наследнике есть все операции, которые были в Базовом. В Базовый класс нужно выносить только общую логику, которую наследники будут реализовывать. Наследников создаем только тогда, когда они правильно собираются реализовать логику Базового класса без проблем.
Барбара Лисков — это американский учёный в области информатики.
Как следовать принципу LSP
Производный класс должен сохранять все свойства базового класса и не изменять их семантику. Нужно добиться того, чтобы объекты производных классов могли безопасно заменять друг друга и базовый класс.
Пример с нарушеним принципа:
class Shape
{
public float area() {
return 0;
}
}
class Circle extends Shape
{
private float radius;
public float area() {
return Math.PI * radius * radius;
}
}
class Square extends Shape
{
private float side;
public float area() {
return side * side;
}
}
Пример с использованием принципа:
abstract class Shape {
public abstract double area();
}
class Circle extends Shape {
private double radius;
@Override
public double area() {
return Math.PI * radius * radius;
}
}
class Square extends Shape {
private double side;
@Override
public double area() {
return side * side;
}
}