为什么Java的数据结构实现扩展了另一个结构而不是一个字段?

时间:2019-09-04 00:12:09

标签: java

在研究Java对其数据结构的实现时,我看到它们只是扩展了另一个数据结构,而不是将该数据结构作为其字段。例如:Stack在其实现中使用Vector,但不是通过使用字段来扩展Vector并使用其方法。

public class Stack<E> extends Vector<E> {

但是,我相信这会引起一些问题。首先,当Stack只有四种主要方法时,使用add的用户可以使用capacityStack之类的方法:push,{{1} },peekpop。此外,由于empty实现Vector,因此用户可以将堆栈创建为List类型,甚至可以创建为Vector类型。我缺少此功能的巨大优势吗?

这不是"What are the negative aspects of Java class Stack inheriting from Vector?"的重复,因为有人要求负面方面,我不知道为什么它很好。

1 个答案:

答案 0 :(得分:-2)

Stack中,如果您输入字段Vector,则可以访问字段public的字段,方法。 如果扩展它,则意味着您已经“实现”了所有Vector方法,并且您也可以访问和覆盖“ protected”可见性。

其他importand事物是instanceof的返回值。如果您扩展超过,那将是正确的。如果您在代码中声明List<Vector>所在的位置,则可以将Stack实例放到列表中(如果使用了继承),而没有使用Vector字段。