当前位置: 首页 > 面试题库 >

Java类堆栈从Vector继承的负面方面是什么?

赵高韵
2023-03-14
问题内容

通过扩展Vector类,Java的设计师可以快速创建Stack类。这种使用继承的负面影响是什么,尤其是对于Stack类?

非常感谢。


问题答案:

一个问题是Stack是一个类,而不是一个接口。这与收集框架的设计不同,在收集框架的设计中,您的名词通常表示为接口(例如,List,Tree,Set等),并且有特定的实现方式(例如,ArrayList,LinkedList)。如果Java可以避免向后兼容,那么更合适的设计将是具有Stack接口,然后使用VectorStack作为实现。

第二个问题是Stack现在绑定到Vector了,通常避免使用ArrayLists之类的东西。

第三个问题是,您不能轻易提供自己的堆栈实现,并且堆栈支持非常非堆栈的操作,例如从特定索引中获取元素,包括潜在的索引异常。作为用户,您可能还必须知道堆栈的顶部是在索引0还是在索引n。该接口还公开了诸如容量之类的实现细节。

在原始Java类库中的所有决策中,我认为这是比较特殊的决策之一。我怀疑聚合会比继承昂贵得多。



 类似资料:
  • <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">

  • 如何/可以重写来自非继承类的方法?其次,有没有比“非继承类”更好的术语? 我有一个“扩展”JFrame的类,需要从JPanel重写paintComponent。怎么做?或者它可以扩展JPanel,并需要访问方法,如setTitle()、setResizable()和setDefaultCloseOperation();

  • 我试图弄清楚Java中的继承和数组,并试图让这些类一起工作。我相信我已经继承下来了,但我仍在为数组部分而挣扎。 有三个文件: 1. Person.java-基类2. Student.java-派生的Person.java3. Family.java-不太确定,我认为这是它自己的基类 人java有两个实例变量,String name和int age,以及各种各样的构造函数toString、equal

  • 问题内容: 接口是否从 Java中的类继承? 如果否,那么我们如何在接口实例上调用对象类的方法 问题答案: 接口是否从 Java中的类继承? 不,他们没有。而且,就这一点而言,也不存在所有接口都隐式继承的通用“根”接口(与类一样)。() 如果否,那么我们如何在接口实例上调用对象类的方法 接口为中的每个公共方法隐式声明一个方法。因此,该方法被隐式声明为接口中的成员(除非它已经从超级接口继承了该方法)

  • 我在阅读java 8默认方法时遇到了以下段落: 如果层次结构中的任何类具有具有相同签名的方法,则默认方法变得无关紧要。默认方法不能重写java.lang.Object的方法。原因很简单,因为Object是所有java类的基类。因此,即使我们将对象类方法定义为接口中的默认方法,它也是无用的,因为对象类方法将始终被使用。这就是为什么为了避免混淆,我们不能让默认方法重写对象类方法。 我很快尝试按照代码来

  • 我有一个父类,它定义了链表方法(返回“this”的方法)的集合。我想定义多个子类,这些子类包含自己的链式方法,但也“重写”父方法,以便返回子类的实例而不是父类。 我不想在每个子类中重复相同的方法,这就是为什么我有一个父类,其中包含所有子类共享的方法。谢谢