Tach!
Vererbung und DI sind zwei verschiedene Dinge.
Genau! Sie beschreiben zwei verschiedene Möglichkeiten zur effizienten Auflösung von Abhängigkeiten.
Vererbung ist ein Mittel, eine starre Abhängigkeit zu schaffen. Das ist nicht in jedem Fall effizient, wenn man immer wieder diese Verbindungen berücksichtigen muss. Eine ganze Menge Leute sehen das jedenfalls als problematisch an, weil sich damit Schwierigkeiten für beispielsweise TDD (Test Driven Design) ergeben, was sie jedoch als Vorteil für qualitativ hochwertige Software ansehen.
Sie sind übrigens die Einzig effizienten Möglichkeiten die auf einen sauberen Programmierstil hinauslaufen.
Wenn man sich mit der einen Vorgehensweise Probleme ins Boot holt, kann man durchaus unterschiedlicher Meinung sein, was man als sauber ansieht.
dedlfix.