簡體   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