Inheritance, as taught in OO in the 1990s (at a time when OO was going to end hunger in the world), has surprisingly few legitimate uses. I would not use the phrase "violate the encapsulation", I would say before that the inheritance "engages" the subclasses. Delphi-style "90's" languages, which only had inheritance as a means of code reuse, had deep class hierarchies in their framework (it even came with a chart in the A3-sized product box to paste on the wall), and broke everything down. each new version.
It gets even weirder when multiple inheritance is allowed. That thing of "Square is subclass of Rectangle but also is subclass of Regulatory Polygon" ... there "Circle" should be subclass of "Regulatory Polygon" or not? At least they discovered in the 1990s that multiple inheritance was not a good idea, and the only really legitimate use was adherence to interfaces, ie, simple inheritance of a concrete class and multiple inheritance of purely abstract classes (Java has been this way since always).
Sometimes this plaster is perfectly adequate. In all visual frameworks I know of, each screen control is descended from a View class (UIView on iOS, View on Android, etc.). In this case, inheritance is appropriate because derived views have to conform rigidly to protocols and Base view operation; and the base view implements all of the basic functionality (it is the derivative that will "talk" to the video driver, etc.). If View changes its modus operandi, it is legitimate and desirable to "break" all the derivatives of View, preferably at compile time, to be readapted.
But in most cases this hierarchical inheritance is a bad way to reuse code. Even the inheritance of interfaces is obsolete, the "protocols" of Objective-C / Swift or "duck typing" of interpreted languages, are much better. These languages also allow you to add methods to a class without having to define a subclass ("composition"). These features allow frameworks with "shallow" hierarchies. such as Apple's UIKit: link
In short, overuse of inheritance was a consequence of the limited resources of the available languages, the "novelty" of OO techniques, and the misunderstanding of "real" OO as implemented in Smalltalk.