[英]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.