在继承层次结构中插入类(objective-c)

时间:2011-10-05 07:29:27

标签: objective-c inheritance

是否有能力将基类插入继承层次结构? 这是一个例子:

@interface BaseClass // has a lot of basic functionality and interface
{...}
@end

@interface ChildClass : BaseClass // customizes BaseClass functionality
{...}
@end

@interface BaseClassEx : BaseClass // add some features to base class
{...}
@end

我希望ChildClassEx具有来自ChildClass的所有方法,但是从BaseClassEx继承

3 个答案:

答案 0 :(得分:0)

为什么不继承ChildClass?这将自动继承所有超类中的所有内容

@interface BaseClassEx : ChildClass // add some features...
{...}
@end

答案 1 :(得分:0)

听起来像是多重继承。目标C没有它。

根据您的描述,我建议采用不同的设计模式。

@class BaseUtility // has a lot of basic functionality
{...}
@end

@class BaseClass // has interface
{...}
@property BaseUtility *utility;
@end

@class ChildUtility : BaseUtility // customizes basic functionality
{...}
@end

@class BaseClassEx : BaseClass // add some features to base class
{...}
@end

现在你可以有四种东西。

  1. 分配了BaseUtility的BaseClass,就像你的BaseClass一样。
  2. 分配了ChildUtility的BaseClass,就像您的ChildClass一样。它获得自定义行为,并具有与BaseClass相同的界面。
  3. 分配了BaseUtility的BaseClassEx,就像你的BaseClassEx一样。它有额外的功能(我假设额外的接口)。
  4. 为其分配了ChildUtility的BaseClassEx,类似于您想要的ChildClassEx。它具有额外的功能和定制的功能。
  5. 类继承是“是一种”模式。以上结合了“是”模式和“有”模式。为了获得你想要的ChildClassEx的效果,你做了一个“是”BaseClassEx,但是“有一个”ChildUtility。

答案 2 :(得分:0)

Objective-C上没有多重继承。但是,您可以使用几种不同的模式来实现类似的效果。只要您的BaseClassEx只添加新方法(并且不会尝试覆盖现有BaseClass方法的行为),最简单的方法是声明一个类别

@interface BaseClass(BaseClassEx)

// new method declarations

@end

@implementtion BaseClass(BaseClassEx)

// new method definitions

@end

如果这样做,BaseClass的所有实例都将拥有新方法。这适用于任何现有的类,甚至像NSString。