OOP is not a manual of features of a class (such as inheritance, polymorphism and such). The concept is way simple if we could group variables, then we group inside a class, and it’s the same with functions. Programming under OOP is basically to arrange variables and functions inside a class. Later, the programmer could use inheritance, di, interfaces and so on, but they are optional. I cringe when I see projects using every possible feature of a class without a real objective. I cringe more when the architect uses inheritance because it looks fine in the UML diagram! and most architects do that!.
So it is possible to work with OOP without even touching inheritance.
My 2c