Abstract classes provide definitions for instance
methods and class methods
but are not intended to create instances. Abstract classes often define the
message interfaces that subclasses should implement.
You create an abstract class
by specifying the ABSTRACT subkeyword on the ::CLASS directive.
Trying to create an instance from an abstract class will result in an error.
It is possible to create abstract methods or attributes on a class.
Abstract methods or attributes are
placeholders that subclasses are expected to override. Failing to provide a real
method or attribute implementation will result in an error when the abstract version is called.