我正在用Java创建一个Deck
类。我只希望可以访问顶部Card
。我正在考虑将Deck
扩展为Stack
,但Stack
继承自Vector
,其中包含方法add(int, E)
。为什么Stack
允许您在其中的任何位置添加元素?有没有办法删除/禁止调用此方法?
另一方面,也许我完全在想这个错误。是否有更好的方法来制作Deck
课程?我应该扩展和/或实现不同的类和/或接口吗?
答案 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)。
正如这个项目所暗示的,我会避免继承容器而是使用合成