Each (abstract class and interface) offers its own set of advantages and disadvantages. Although Russell is right in suggesting composition over inheritance, using templates offers a program for an interface rather than an implementation (Head First Design Patterns).
An abstract class offers a lot of flexibility where you can implement methods under covers, so to speak, provide implementation, etc. Both interfaces offer polymorphism if this is a concern. But abstract classes take a base slot for inheritance.
source share