override an abstract function with a virtual one?
基本上,我是在问如何根据我想做的来正确地做这件事。
我有一个武器类,它是抽象的,因为它包含像fire()这样的方法,这些方法在如何发射时非常通用(激光和子弹),它们需要继承器实现。
然而,一旦我得到一个真正的弹道武器类继承自武器类。
好吧,这些火大多数都是一样的。他们产生炮弹,降低弹药数量,等待重新装填计时器降到0,然后再允许开火。
无论是坦克炮、手枪、炮塔还是火炮,它都将保持不变,而不仅仅是变化。
这看起来像是一个虚拟类(鱼雷发射器可能需要一个特殊的实现来提升和降低舱门来开火,所以它不能是非虚拟/抽象的,需要修改)
但基本上我想
抽象武器类fire()方法
虚拟弹道武器继承武器火力()方法
但似乎您不能重写一个抽象方法并使其成为虚拟方法。
但我不想有一个全新的方法,因为我想
武器火
除非特定的弹道武器已经超越了一般的方法,否则它将进入弹道武器并使用那里的实现。
抽象意味着它必须在子类中被重写,而虚拟意味着它可以被重写。抽象类中可以有虚拟方法。您可以通过以合同的形式绑定接口来解决您的问题,例如:
1 | Ifireable |
也许你可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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() { } } |