I think polymorphism is perhaps the most overused and wrongly hyped aspect of OO. I am not saying it’s wrong to use — on the contrary, but I see so many people trying to create a huge tree of abstraction (a Ford is a car is a four-wheeled vehicle is a vehicle is a transportation mechanism, is a…) when all they really need is the one object.
Our company accepts data produced by third-party Point of Sale (POS) systems; each has a different format that we coerce into a single object we call a Check. The workers that do the POS-specific transformations are a perfect case for a subclass.
I think, as with many languages, bad teaching and poor oversight of developers lead to big messes.