This is a great reply. If you don’t use classes to define behavior for objects that manage their own state, there’s no point in using OOP.
In java, inheiretance is directional in a single way, but if you instantiate a singleton component, you can end up affecting the state of every other class that uses that same component. This is not wrong per se, it is a property of OOP in itself.
If this rubs you the wrong way, possibly you should be working in purely, monadic functions.
Having a single reference is useful, but using instantiation as a way to get it has proven a bad design decision.