I truly felt from these words, yeah, this is how modern OOP is like.
In another shallow word, these OOP code looks redunt and looks like trying to reserve everything configurable/overridable for future and end up none of them is actually used in the future.
One more thing: Polymorphism and Inherits tends to seperate code for branches into different files, which could have been put together, this makes code somehow unreadable — we see parts easily, and the whole hard. (Maybe this issue is not on OOP. Maybe we actually need ADT (Algebric Data Types) for that.)