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

时间:2014-02-13 19:18:27

标签: java stack

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

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

3 个答案:

答案 0 :(得分:4)

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

Stack不使用一个接口,允许它隐藏那些没有意义的方法。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

Stack extends Vector是java库中糟糕设计的一个例子(参见有效java的this)。

正如这个项目所暗示的,我会避免继承容器而是使用合成