Why inheritance?
Inheritance is one of the fundamentals principle in Object-Oriented Programming. It is usually defined as a is-a relationship between objects (or classes, if the language supports them).
Consider, for example, a generic person and a student. We can say that the student is a person that is a student inherits all features of a generic person, but he has a specialized profile—he studies. This is true for other specialized profiles such as a teacher, a lawyer, a singer, and so on.
The is-a relationship keyword, and thus inheritance, informally says that if an object A inherits from object B, then we say that A is B, that is, A is a specialized version of B. Sometimes, A is also said to be a derived object of B, while B is usually called the base object or parent object.
But, why do we need inheritance in Object-Oriented Programming? Since a derived object has all the features of the base object, inheritance can help to reduce code redundancy between similar objects by sharing common...