繁体   English   中英

为什么java.util.Stack允许.add(int,E)?

[英]Why does java.util.Stack allow .add(int, E)?

我正在用Java制作Deck类。 我只希望访问顶部的Card 我正在考虑使Deck扩展Stack ,但是Stack继承自Vector ,它具有方法add(int, E) 为什么Stack允许您在其中的任何位置添加元素? 有没有一种方法可以删除/禁止对此方法的调用?

另一方面,也许我完全在考虑这个错误。 有没有更好的方法来制作Deck课程? 我是否应该使其扩展和/或实现不同的类和/或接口?

我会使用Deque(也称为Deck)Stack和Vector大约是20年前设计的,而Deque是一个相对较新的设计(大约8年)

堆栈不使用允许其隐藏对其预期目的没有意义的方法的接口。

就像Vector一样,Stack是一个古老的类,不应再使用了。 您不能“禁用”此方法,因为正如您所指出的,Stack扩展了具有此方法的Vector。 子类扩展了超类可以做的事情,并且没有限制它。 这就是多态性的原理。 因为Vector可以定义它,而STack是Vector,它也可以做到。

考虑使用Collections.asLifoQueue(new LinkedList());

堆栈延伸向量位于Java库坏设计的一个例子(参照从有效的Java)。

就像这个项目所暗示的那样,我会避免从容器继承,而是使用组合

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM