(我认为这是关于OOP的一个非常基本的问题,但不幸的是我无法找到它 - 所以,请关闭这个问题,如果它是一个公共的。)
我想创建一个类,其主要目的是成为另一个类的对象数组的容器。用户应该能够非常容易地访问这些对象,作为常规数组 - 但是,应该在数组逻辑之上存在自定义逻辑。
我应该从头开始创建一个自定义类并使用标准数组类作为成员,还是应该对标准数组类进行子类化,并将我的自定义逻辑包含在现有方法的重载中以及新方法中?
(我考虑过目标C,但我认为它与语言有很多关系,因此我没有包含在标签中)。
答案 0 :(得分:2)
如果你的类尊重整个数组接口,无论它在你的上下文中是什么,是的,你可以继承它。如果您的"自定义逻辑位于数组逻辑之上"改变了数组接口的契约,你不应该对它进行子类化。
如果您是Array的子类,则可以将您的类视为数组。一些不了解你的类的方法可以将它的实例视为一个数组。这在多态性中起作用。虽然你的班级可以拥有"自定义逻辑"但是阵列的界面不能被破坏。
注意:在通用上下文中回答,不是特定于任何语言,甚至不是特定于Array类。这对任何允许扩展的类都有效。
答案 1 :(得分:1)
...但在Objective-C NSArray
和NSMutableArray
中使用类集群实现。它们不是具体的类,当你可以对它们进行子类化时,你必须实现自己的存储并为-count
和-objectAtIndex:
提供自己的实现。
因此,处理类似情况的首选方法是组合 - 实例变量或属性 - 而不是子类化。
如果您需要您的类来响应所有数组方法,您可以使用-forwardInvocation:
,如here所述,将消息传递给数组实例。