Abstract Class vs. Interface
Abstract class (or type) is a type of in a nominative type system declared by the program. Though the name implies such, an abstract class may or may not include abstract methods or properties. The distinction class refers to different language constructs that may be used to implement abstract types. Abstract classes can be characterised by a design issue that keeps with the best object oriented programming and by their unfinished natures.
An interface is an abstract type that classes must implement to specify an interface (generically speaking). Interfaces may only contain method signatures and constant declarations (both static and final), never method definitions. Interfaces simulate multiple inheritances and are used to encode similarities shared among various types of classes.
Abstract types are able to be created, signified, or simulated in several different ways. A programmer can signify abstract types by using the keyword abstract explicitly, by including one or more methods in the class definition, inheriting from another abstract type without overriding missing features necessary to complete the class definition, or by sending a particular method to the object oriented programming language known as this that doesn’t implement the method directly.
Interfaces can be defined using abstract methods. Classes may also be implemented in interfaces. If a class does implement an interface and does not implement all its methods, the signifier abstract must be used, otherwise that signifier is not necessary (because all interfaces are inherently abstract). Classes can also implement multiple interfaces.
While interfaces are used to specify generic interfaces, abstract types can be used to define and enforce protocol (which is a set of operations which all objects that implement the desired protocol must support). Abstract types do not occur in languages without subtyping. As such subtypes are forced to implement all needed functionality, ensuring the correctness of program execution. There are several ways in which abstract types may be created: full abstract base classes are classes that are either explicitly declared to be abstract or contain abstract (unimplemented) methods; Common Lisp Object Systems include mixins that are based on the Flavors system; Java, of course; and Traits, which acts as an extension to Smalltalk.
Summary:
1. Abstract classes (or types) declare programs; interfaces are abstract types that all classes must implement in order to specify their interface.
2. Abstract types can be signified using the keyword explicitly; interfaces are inherently abstract, therefore do not need to be signified using the keyword at all (unless a specific class implements an interface but does not implement all its methods).