一个类的伊娃可以作为它的超类的一个实例吗?

问题描述:

如果ClassBClassA的子类,如果ClassB's ivars之一是来自ClassA的实例,它会好吗?对不起,如果这是一个愚蠢的问题。我只是觉得它如何从ClassA继承ClassB,但它可以拥有它的一个实例。一个类的伊娃可以作为它的超类的一个实例吗?

+2

考虑到每个对象都有NSObject作为超类。 – 2012-08-16 21:06:28

是的,那很好。基本上,您可以在任何课程中使用任何类型的ivars。

+1

在某些语言中,如果您尝试使A的*子类成为A的成员,它可能会变得有点棘手。关于Objective-C的无关 - 无需尝试。 – 2012-08-16 21:08:35

+0

@HotLicks是的,但我们不是说其他​​语言,只有Obj-C。如果你使用'@ SomeSubclass'正向声明子类,那么它必须是完全有效的(尽管如此,仍然不是很好的做法)。 – 2012-08-16 21:18:56

+0

是的,我期望它能够在Obj-C中工作,因为它是duck-typed,并且不会尝试维护类继承映射。从未尝试过。 (即使它不能正常工作,你也可以用超类指针来伪造它 - 几乎任何语言都是如此。) – 2012-08-16 21:36:41

这完全没问题。一个班级甚至可以拥有自己的类型的ivar。

比方说,你有一个班级的旅行车,并想模拟一列火车。你的旅行车班可能会有2辆旅行车。一个指向列车中的下一个货车,另一个指向前一个货车。

然后,您可以实现Wagon的PassengerWagon子类,它会从它的超类继承Wagon ivars。要清楚:如果您只想跟踪PassengerWagon实例的邻居,但您可以仅在PassengerWagon中定义ivars(类型Wagon),而不是超类,但这些邻居可以是任何Wagon类型。