0

我有一个试图在“Enemy”类中实现的攻击方法,它将调用“Paragon”类的子类。

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

这是我在 Enemy 类中描述的当前攻击方法:

-(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'会解决它,但我没有成功使用它们。

谢谢。

4

1 回答 1

4

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

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

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

于 2013-10-04T15:18:06.177 回答