存在具有诸如add_first(),add_last(),add_after(),remove_first(),remove_last()和remove()之类的函数的LinkedList类。
现在有一个Stack类,提供了push(),pop(),peek()或top()等功能,并且为了实现这些方法,它扩展了LinkedList类方法。这是否违反了《里斯科夫替代原则》?
例如,考虑在add_after()情况下将节点添加到链接列表的第n个位置的情况。这可以在基类中完成,但不能在Stack类中完成。此处的后置条件是否已减弱,或者您是否修改add_after()方法以将其添加到堆栈顶部?
另外,如果不违反,这是不好的设计吗?以及如何使用LinkedList类实现Stack功能?
LinkedList
吗?您可能想听某个Joshua Bloch(在设计Java集合框架中起主要作用)的建议,当他说“优先考虑继承LinkedList
而不是继承”时-也许在您的堆栈类内部,但实际上没有扩展它?
LinkedList
该成员在后台进行了繁重的工作(组成)。这样,您的代码用户就不会在需要列表的地方偶然使用堆栈,反之亦然。