The question is asked many times. I want to show old Answers, because they are interesting, as well as discussion. I already gave my Answer, but see for others as well.
Please see the discussion on how to decide on use of interfaces vs. abstract classes:
How to decide to choose Abstract class or an Interface[
^].
Also, one fundamental difference is that interfaces allows for multiple inheritance, in contrast to classes (abstract or not). This is called
week form of multiple inheritance and cause serious design implications.
—SA