Inheritance and polymorphism are both very useful and really show off the power of object-oriented programming. However, in some circumstances, inheritance can cause more problems than it solves, and therefore, we should bear in mind a few rules of thumb when deciding whether or not to use it.
Let's say we want to make a more powerful Enemy
object; it will have the same behavior a regular Enemy
object will have but with more health. One possible solution would be to derive a new class PowerEnemy
from Enemy
and give it double health. In this solution the new class will seem extremely sparse; it will use the functionality from Enemy
but with one different value. An easier solution would be to have a way to set the health of an Enemy
class, whether through an accessor or in the constructor. Inheritance isn't needed at all.