0

(我认为这是关于 OOP 的一个非常基本的问题,但不幸的是我找不到它——所以,如果它是重复的,请关闭这个问题。)

我想创建一个类,其主要目的是成为另一个类的对象数组的容器。用户应该能够非常容易地访问这些对象,就像一个常规数组一样——但是,在数组逻辑之上应该有自定义逻辑。

我应该从头开始创建自定义类并使用标准数组类作为成员,还是应该对标准数组类进行子类化并将我的自定义逻辑包含到现有方法和新方法的重载中?

(我想到了Objective C,但我不认为它与语言有很多关系,所以我不包括在标签中)。

4

2 回答 2

2

如果你的类尊重整个数组接口,无论它在你的上下文中,是的,你可以子类化它。如果您的“数组逻辑之上的自定义逻辑”更改了数组接口的合同,则不应将其子类化。

如果您将 Array 子类化,则您的类可以被视为一个数组。一些不知道你的类的方法可以将它的实例视为一个数组。这在多态性中起作用。尽管您的类可以具有“自定义逻辑”,但不能破坏 Array 的接口。

注意:在通用上下文中回答,不特定于任何语言,甚至特定于 Array 类。这对任何允许扩展的类都有效。

于 2012-06-15T00:21:55.403 回答
1

...但在 Objective-C中NSArrayNSMutableArray使用类集群实现。它们不是具体的类,虽然您可以对它们进行子类化,但您必须实现自己的存储并为 and 提供您自己的-count实现-objectAtIndex:

因此,处理您所描述的情况的首选方法是通过组合- 实例变量或属性 - 而不是子类化。

如果您需要您的类响应所有数组方法,您可以使用-forwardInvocation:,如此所述,将消息传递给数组实例。

于 2012-06-15T00:32:28.280 回答