- 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.