我有一个尝试在“敌人”类中实现的攻击方法,该方法将调用“对角线”类的子类。
子类是通过.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'可以解决它,但是我没有成功使用它们。
谢谢。
这听起来像是一个一般的面向对象设计问题,而不是Objective-C特有的问题。
您不应使用一系列了解每个Paragon类的if语句。这样做意味着您的Enemy类与每个Paragon子类紧密耦合:如果您想添加一个新的Paragon子类,则还必须更新Enemy。
相反,您的每个Paragon子类都应该重写underAttackByEnemy:
方法,并且可能重写Paragon上从中调用的任何方法attackParagon
。这样,您的子类将知道正在发生攻击,并且可以执行特定于他们的任何逻辑,同时允许Enemy仅了解Paragon,而不是Paragon的所有子类。所有Paragon子类之间通用的任何攻击逻辑都应在Paragon中实现,然后再从子类中调用:例如,[super underAttackByEnemy:enemy]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句