1

基本上我在问如何最好地根据我的想法正确地做到这一点。

我有一个抽象的武器类,因为它包含诸如 Fire() 之类的方法,这些方法在它们如何射击方面非常通用(激光与子弹),它们需要继承者实现。

但是,一旦我得到一个继承自武器类的实际弹道武器类。

好吧,大多数人都一样。他们产生弹丸并降低弹药数量并等待重新加载计时器降到0,然后再次允许射击。

无论是坦克炮、手枪、炮塔还是大炮,它都将保持不变而不是改变。

这似乎是一个虚拟类(鱼雷发射器可能需要一个特殊的实现来提升和降低舱门以发射,因此它不能是非虚拟/抽象的,它需要是可修改的)

但是基本上我想拥有

抽象武器类 Fire() 方法

虚拟弹道武器继承武器Fire()方法

但是您似乎无法覆盖抽象方法并使其成为虚拟方法。

我不认为我想要一个全新的方法,因为我希望能够做到

武器.火

它进入弹道武器并在那里使用实现,除非特定的弹道武器覆盖了该通用方法。

4

2 回答 2

1

抽象意味着它必须在子类中被覆盖,而虚拟意味着它可以被覆盖。您可以在抽象类中拥有虚拟方法。您可以通过以下形式的合同绑定来使用接口解决您的问题:

Ifireable 
于 2013-04-30T03:17:15.493 回答
0

也许你可以这样做:

abstract class Weapon
{
    public abstract void Fire();
}

class BallisticWeapon
{
    virtual public void Fire()
    {
        // Ballistic fire
    }
}

// Weapon need ballistic fire
class WeaponA : BallisticWeapon
{
}

// Weapon don't need ballistic fire
class WeaponB : Weapon
{
    // Implement fire
    public void Fire()
    {

    }
}
于 2013-04-30T03:28:16.983 回答