• An interface declares a set of related methods, outside of any class.
  • An abstract class is an incomplete class definition that declares but does not define all of its methods.
  • Unlike an interface, an abstract class is a proper class: It can have data members and can be a subclass of other classes. Unlike a concrete (nonabstract) class, however, some of its behaviors are deliberately left to be defined by its own subclasses. Abstract classes cannot be instantiated because of this — only instances of concrete subclasses can be created.
  • An interface is almost identical to an abstract class with no data members and no method definitions.