如何解决在游戏中继承2个抽象类的问题

本文关键字:继承 2个 抽象类 问题 游戏 何解决 解决 | 更新日期: 2023-09-27 17:57:39

我的问题在于继承可播放角色的属性。我有一个名为Being的抽象类,它指出所有继承类都需要包含力量、敏捷等属性。玩家需要选择一个种族,例如将力量从0提高到10的兽人。然后玩家需要选择一个职业,比如蛮力,为英雄的力量增加7点。在我看来,我会被Hero类继承2个抽象类所困扰吗?这是我的兽人职业的摘录:

public abstract class Orc:Being
{
     private int _strength = 10;

     //Another question, is it okay to declare an abstract property in my base abstract
     //class to force the inheriting class Orc to override the property? I wanted to 
     //find a way to force subclasses to have strength attributes
     public override int Strength
     {
            get {return _strength;}
            set {_strength = value;}
     }
}

如何解决在游戏中继承2个抽象类的问题

您可以使用Composition作为多重继承的解决方案:

这里的答案最好地解释了这一点:https://stackoverflow.com/a/178368/340128

如果你的抽象类只有抽象属性,你可以把它变成一个接口。这迫使实现类提供一个实现,并且您可以实现任意数量的接口。

否则,我会查看decorator模式或策略模式。两者都使用组合作为继承的替代方案。

组件模式可能就是您想要的。

你可以让存在包含一个种族组件和一个类组件(即场),并使强度场getter返回种族的强度加成+类的强度加值的总和。