Да, это нарушает LSP, потому что Stack
нарушает договор Queue
. Я подозреваю, что комментарии в примерах инвертированы: Queue
должно быть FIFO, а Stack
должно быть LIFO; но в любом случае, у ребенка и родителя есть противоположные постусловия для их соответствующих pop()
методов, поэтому один не может наследоваться от другого.
- Постусловие
pop()
от Queue
означает, что самый старый элемент удален. - Пост-условие
pop()
из Stack
состоит в том, что самый новый элемент удален.
Очевидно, что эти два условия не могут быть удовлетворенным тем же методом.
Чтобы использовать Java в качестве примера, Queue
не имеет pop()
метода и не реализуется Stack
. Queue
- это , реализованный с помощью Deque
, который объединяет методы Queue
и Stack
, но обратите внимание, что Deque
исчерпывающе документирован для определения различных вариантов поведения для различных наборы методов.