Favor composition over inheritance.
Master and Student…
Master: Grasshopper, tell me what you have learned of the Object-Oriented ways.
Student: Master, I have learned that the promise of the object-oriented way is reuse.
Master: Grasshopper, continue…
Student: Master, through inheritance all good things may be reused and so we come to drastically cut development time like we swiftly cut bamboo in the woods.
Master: Grasshopper, is more time spent on code before or after development is complete?
Student: The answer is after, Master. We always spend more time maintaining and changing software than on initial development.
Master: So Grasshopper, should effort go into reuse above maintainability and extensibility?
Student: Master, I believe that there is truth in this.
Master: I can see that you still have much to learn. I would like for you to go and meditate on inheritance further. As you’ve seen, inheritance has its problems, and there are other ways of achieving reuse.
====
This quote comes from Head First Design Patterns, I personally favor composition over inheritance.
The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.