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.