The greatest thing about object-oriented programming is code reuse. However, making code reusable isn’t always the easiest to do. You have to use a different mind-set when coding. One such option is Generalization/Specialization. In normal terms, Generalization & Specialization both refer to inheritance but the way in which it is implemented or looked into makes the difference. Both concepts can be implemented using inheritance only. But the order of creation of the subclass and the superclass drives the concept name.