Objective-C按基类调用子类

埃里克·H

我有一个尝试在“敌人”类中实现的攻击方法,该方法将调用“对角线”类的子类。

子类是通过.h文件中的@interface创建的,并在.m中实现。

这是我在“敌人”课程中所述的当前攻击方法:

-(void)chosenParagonForAttack:(Paragon*)paragon{
    _paragonLink = nil; //_paragonLink, is an object of class Paragon.
    _paragonLink = paragon;
    [self attackParagon];
    [paragon underAttackByEnemy :self];
}

我得到的问题是,由于实际的典范是由子类创建的,因此不会发生攻击。子类定义具有不同图像和数据等的不同“典范”。

有没有一种方法可以只声明基类(Paragon)来调用子类?

我可以通过创建一个包含Paragon类的每个子类的if语句来解决此问题,但是我很想知道是否有更好的方法可以解决此问题。

我以为'isSubclassOfClass'或'isKindOfClass'可以解决它,但是我没有成功使用它们。

谢谢。

安迪·威尔金森(Andy Wilkinson)

这听起来像是一个一般的面向对象设计问题,而不是Objective-C特有的问题。

您不应使用一系列了解每个Paragon类的if语句。这样做意味着您的Enemy类与每个Paragon子类紧密耦合:如果您想添加一个新的Paragon子类,则还必须更新Enemy。

相反,您的每个Paragon子类都应该重写underAttackByEnemy:方法,并且可能重写Paragon上从中调用的任何方法attackParagon这样,您的子类将知道正在发生攻击,并且可以执行特定于他们的任何逻辑,同时允许Enemy仅了解Paragon,而不是Paragon的所有子类。所有Paragon子类之间通用的任何攻击逻辑都应在Paragon中实现,然后再从子类中调用:例如,[super underAttackByEnemy:enemy]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章