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

我应该扩展ArrayList(is-a)还是将其包括为成员(has-a)?

殳勇
2023-03-14
问题内容

我正在制作一个维护数字列表的简单程序,并且我希望该列表也有一个名称。最好的方法是:让我的列表类扩展ArrayList或使其包含ArrayList成员?在两种情况下,当然都会有一个“名称”字符串成员。

第一种方法意味着我只需要实现名称的getter和setter方法,但是我认为这会使我的课程与特定实现紧密联系在一起吗?例如,如果我以后要使用Vector,则到处都必须更改代码

第二种方法可以更轻松地更改实现,但是由于我必须实现一堆包装器,因此现在当然很烦人。

我已经阅读了有关继承与组合的SO帖子,并且由于我的列表是ArrayList的一种,因此我倾向于第一种方法。但是,由于我要扩展Collection类与扩展一般类,因此讨论是否有任何区别?还是我想得太多?


问题答案:

两者都不是更好的选择,正如您提到的那样。

如果进行聚合(必须),则必须包装要使用的成员的所有功能(即,实现调用它们的功能)

如果进行继承,则会向新类中添加许多不必要的功能,并且还需要实现抽象功能。

如果您使用的是C ++环境,则可以选择私有继承,但是这两者各有利弊



 类似资料:
  • 问题内容: 我发现自己同意返回接口而不是具体的类。 原因很简单,我要松散耦合。 但是还会有其他影响或权衡吗? 问题答案: 对于List或ArrayList之类的类型,不应进行任何编译,并且应将List提升Code返回到接口。 如果这是通过诸如CopyOnWriteArrayList之类的并发包进行的,并且您使用的是addIfAbsent之类的方法(未在List接口中定义),您将发现自己受到限制。

  • 我发现自己同意返回一个接口,而不是一个具体的类。

  • 问题内容: 我想将对象集合添加到arrayList,仅当特定属性不为null时。 我正在考虑扩展ArrayList并在子类中实现检查。 一种替代方法是在将属性放入Arraylist中之前检查属性,但这意味着,如果我需要根据逻辑将对象添加到arraylist中,则我将不得不分散if检查每个位置。 我想知道您对此有何想法……再想一想,这是否太过分了? 问题答案: 实际上,我建议使用记录良好的 Deco

  • 问题内容: 我正在使用Python2.x。 比较时我的编辑会警告我,但使用时不会警告。 我在Python Shell中进行了测试,并确定两者都是有效的语法,但我的编辑器似乎在说这是首选。 是这样吗?如果是,为什么? 问题答案: 摘要: 使用时要核对对象的身份(如检查,看看是否是)。使用时要检查的平等(例如是等于?)。 说明: 你可以在其中返回的自定义类True 例如: is检查对象身份。只有1个对

  • 当我比较,但是当我使用。 我在pythonshell中做了一个测试,确定两者都是有效语法,但我的编辑器似乎在说是首选。 情况是否如此,如果是,原因何在?

  • 问题内容: 如果选择nvarchar(MAX),我不知道字符数是否有限制,而且我不确定无论如何我需要多少个字符。 在这里使用什么标准数据类型?我正在使用SQL Server 2008 R2 问题答案: 不推荐使用该类型,与和一样。微软建议使用替换它们,并分别。 因此使用。 参考: ntext,文本和图像(Transact-SQL)