The short answer: An abstract class allows you to create functionality that subclasses can implement or override . An interface only allows you to define functionality, not implement it. And whereas a class can extend only one abstract class, it can take advantage of multiple interfaces.