Существует класс LinkedList с такими функциями, как add_first (), add_last (), add_after (), remove_first (), remove_last () и remove ()
Теперь есть класс Stack, который предоставляет такие функции, как push (), pop (), peek () или top (), и для реализации этих методов он расширяет методы класса LinkedList. Это нарушение принципа подстановки Лискова?
Например, рассмотрим случай add_after () для добавления узла в n-ю позицию связанного списка. Это можно сделать в базовом классе, но не в классе Stack. Постусловия здесь ослаблены, или вы модифицируете метод add_after () для добавления в верхнюю часть стека?
Кроме того, если не нарушение, это плохой дизайн? И как бы вы реализовали функциональность Stack с помощью класса LinkedList?
LinkedList
? Возможно, вы захотите прислушаться к совету некоего Джошуа Блоха (который сыграл главную роль в разработке инфраструктуры коллекций Java), когда он сказал: «Предпочитаю композицию над наследованием». Может быть, есть LinkedList
внутренний класс стека, но на самом деле не расширять его?
LinkedList
который выполняет тяжелую работу за кулисами (композиция). Таким образом, пользователи вашего кода не могут случайно использовать стек, где им нужен список, или наоборот.