Base Class Usage Guidelines:

An interface type is a specification of a protocol, potentially supported by many object types. Use base classes instead of interfaces whenever possible. From a versioning perspective, classes are more flexible than interfaces. With a class, you can ship Version 1.0 and then in Version 2.0 add a new method to the class. As long as the method is not abstract, any existing derived classes continue to function unchanged.

Emph mine.

Yes.  What they said. Why is this even controversial?  (No, really -- Why is it so common to see interfaces where a base class would seemingly work just as well or, as pointed out above, better?  Is it that many don't really understand OO?  Other than kludging multiple inheritance, is there an advantage to interfaces that I'm missing?  Are there droves of CS professors teaching patterns with interfaces without really ensuring their students understand what they're accomplishing?)

Labels: ,