如何基于父对象定义子对象?

时间:2013-03-21 17:03:33

标签: objective-c oop parent-child

这是一个普遍的问题。我可以把我的问题分成两部分:

我有一个ChildClass类,来自ParentClass。

  • ParentClass有许多属性和方法。
  • ChildClass有一些新方法和一些新属性。

1)我想定义一个initFromParentClass方法,其签名为

       - (id) initFromParentClass:(ParentClass)anObjectFromTheParentClass

这将基于ChildClass创建anObjectFromTheParentClass的新实例 - 也就是说,新实例的所有属性都是从“父instanc”中“复制”的。

2)这两个父/子对象可以动态链接吗?即:如果父母改变,孩子会改变吗?

谢谢

1 个答案:

答案 0 :(得分:1)

一个熟悉的习惯用法是让子类将现有方法委托给父实例:

 @implementation ChildClass
 @property (nonatomic, strong) ParentClass *obj;
 - (void) mill
 {
      [obj mill];
 }

 - (NSInteger) count
 {
       return [obj count];
 }

如果ParentClass具有广泛且快速变化的API,这可能是单调乏味且难以维护的。在这种情况下,您可能根本不想继承,而是从ParentClass和ChildClass中提取公共接口,并且可能让ChildClass的实例观察到对其进行初始化的对象的更改。