 <p>it depends on your own style. </p> <p>In fact, a class which inherits from an abstract class has to use ALL attributes and methods of it - it is nearly impossible to create a clean architecture with many levels of inheritance. </p> <p>The main advantage of interfaces is the flexibility - you can implement much of them but do not have to change the internal structure of your class to implement them. </p> <p>In most cases, it is best practice to use interfaces, except in some software patterns like compositum or strategy pattern. </p> <p>But at the end it is your decision - you have to choose the type of inheritance you want in your project. </p> <p>Interfaces help you to gain flexibility, abstract classes bring more cohesiveness to your architecture because they group classes that are similar together. --> you can reuse your code of the abstract classes in its subclasses</p>