Abstract classes have some special features:
it's impossible to create an instance of an abstract class;
an abstract class can contain abstract methods that must be implemented in non-abstract subclasses;
it can contain fields and non-abstract methods (including static);
an abstract class can extend another class, including abstract;
it can contain a constructor.