一个问题是Stack是一个类,而不是一个接口。这与收集框架的设计不同,在收集框架的设计中,您的名词通常表示为接口(例如,List,Tree,Set等),并且有特定的实现方式(例如,ArrayList,linkedList)。如果Java可以避免向后兼容,那么更合适的设计将是具有Stack接口,然后使用VectorStack作为实现。
第二个问题是Stack现在绑定到Vector了,通常避免使用ArrayLists之类的东西。
第三个问题是,您不能轻易提供自己的堆栈实现,并且堆栈支持非常非堆栈的操作,例如从特定索引中获取元素,包括潜在的索引异常。作为用户,您可能还必须知道堆栈的顶部是在索引0还是在索引n。该接口还公开了诸如容量之类的实现细节。
在原始Java类库中的所有决策中,我认为这是比较特殊的决策之一。我怀疑聚合会比继承昂贵得多。



