Abstract classes allow you to transfer some code / data, which can then be used in inherited classes. They are great for this, but use inheritance very sparingly. Only inherit from the class if the new class is completely interchangeable with the abstract.
Interfaces do not contain code.
I prefer to code interfaces when possible. I also want these interfaces to be as small as possible. This leaves me with the opportunity to change the initial impimentation at a later time.
If you are coding an abstract class, it is more difficult to replace it with a later time.
You can apply an interface (or several small interfaces) to an abstract class. Seems like this might be your best approach.
source share