有时,您发明一个接口来表示某种类型的对象支持某种类型的行为。例如,两者Dog都有ScaryDog接口MeleeAttacker。

但是现在说我将 a 传递给MeleeAttacker*某个函数,
void Attack( MeleeAttacker* attacker, Living *victim ) ;
因为MeleeAttacker从层次结构中分离出来,我无法访问的生命体征——即使attacker我知道是一个. 由于我构建层次结构的方式,我知道它将永远是 common class 的继承者。但是代码不知道这一点。我的问题是,我怎么能告诉代码呢?LivingattackerattackerLivingMeleeAttackersWarmBlooded
我想我只是通过引入MeleeAttacker接口来混淆了事情,但我不想WarmBlooded用不会在层次结构的某些分支中实现的功能(例如,aBird的混战的“实现”)挤满基类攻击可能是{}(什么都没有))。