The role of abstract classes:
1) construct common attributes of subclasses;
2) Define the interface specification for the sub-class.
3) Provide some public service functions (subclass multiplexing);
4) Establish a stable abstraction layer dependency (for ease of overall reuse at the architectural level).
5) Facilitate the expansion of the function, the new sub-class, through the injection interface can be easily linked to the original system structure.
Other points of view:
Abstract class provides partial implementations that enable subclasses to reuse code for some abstract classes
The abstract class provides a common interface for its subclasses (note: This says that my interface is different from the interface in Java)
That is, others can use objects of each subclass as objects of an abstract class.
Abstract classes extract the generality of things and abstract them into a high-level class.
The use of abstract types of unified type, to operate, in favor of future expansion, migration, reuse!!
The role of abstract classes (interface classes)