gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:23 25 4
gpt4 key购买 nike

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

第一种方法意味着我只需要为名称实现一个 getter 和 setter,但我认为这会将我的类与特定实现联系得太紧密?例如,如果我想稍后使用 Vector,那么我将不得不更改所有地方的代码。

第二种方法可以更容易地更改实现,但现在当然变得很烦人,因为我必须实现一堆包装器。

我已经阅读了有关继承与组合的 SO 帖子,并且由于我的列表是一种 ArrayList,所以我倾向于第一种方法。但是,讨论是否有任何差异,因为我正在扩展 Collection 类与扩展一般类?还是我想多了?

最佳答案

从长远来看,作为成员包含通常比扩展更好。通过这种方式,您可以更明确地允许什么,从而更容易测试和保持类的联系。如果您只是扩展 ArrayList,那么它可能不会总是按您的预期使用。当然,权衡是您必须为您确实希望允许的所有内容显式创建传递方法。或者(或另外)您可能希望提供一种方法来获取基础 List,您可以用不可变集合包装它以保护它免受类控制之外发生的更改。

关于java - 我应该扩展 ArrayList (is-a) 还是应该将其作为成员包含 (has-a)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5306887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com