在研究Java对其数据结构的实现时,我看到它们只是扩展了另一个数据结构,而不是将该数据结构作为其字段。例如:Stack
在其实现中使用Vector
,但不是通过使用字段来扩展Vector
并使用其方法。
public class Stack<E> extends Vector<E> {
但是,我相信这会引起一些问题。首先,当Stack
只有四种主要方法时,使用add
的用户可以使用capacity
和Stack
之类的方法:push
,{{1} },peek
和pop
。此外,由于empty
实现Vector
,因此用户可以将堆栈创建为List
类型,甚至可以创建为Vector
类型。我缺少此功能的巨大优势吗?
这不是"What are the negative aspects of Java class Stack inheriting from Vector?"的重复,因为有人要求负面方面,我不知道为什么它很好。
答案 0 :(得分:-2)
在Stack
中,如果您输入字段Vector
,则可以访问字段public
的字段,方法。
如果扩展它,则意味着您已经“实现”了所有Vector
方法,并且您也可以访问和覆盖“ protected
”可见性。
其他importand事物是instanceof
的返回值。如果您扩展超过,那将是正确的。如果您在代码中声明List<Vector>
所在的位置,则可以将Stack
实例放到列表中(如果使用了继承),而没有使用Vector字段。