Solution:
Inheritance is not well suited for code reuse. Inheriting for code reuse usually leads to:
Classes with inherited methods that must not be called on them (violating the Liskov substitution principle), which confuses programmers and leads to bugs.
Deep hierarchies where it takes inordinate amount of time to find the method you need when it can be declared anywhere in dozen or more classes.
Generally the inheritance tree should not get more than two or three levels deep and usually you should only inherit interfaces and abstract base classes.
Substitution
Coil Spring
Local Jobs
Linux operating system
Government Jobs
There is however no point in rewriting existing code just for sake of it. However when you need to modify, try to switch to composition where possible.
That will usually allow you to modify the code in smaller pieces, since there will be less coupling between the classes.