This question seems to be repetition, but it's not. I googled, bus could not get conceptual clarity. There are many Animal, Cars kinds of example. But, I want to understand the basic logic. Generally it is said, Favor Composition Over Inheritance, as it offers many advantages. In that case, why inheritance is provided as the one of the main concepts of OOPs at all. My question is when to favor the inheritance over composition?
Rather than change, maintainability, etc, I think the core concept matters. Does Is A relationship seem better than a Has A relationship in a given situation?
A recommended reading: Gang Of Four's discussion about Type, Interface, OOP, etc before they begin discussion about patterns.
Also take a look at: Composition vs. Inheritance: How to Choose?