Using classes and interfaces
Abstract Class : has a number of abstract methods and properties and maybe some concrete implementations
Generic Implementation extends the abstract class: not an abstract class. Implements all methods either with empty/no-op or code that makes sense in most cases
Specific Implementation: extends either the abstract class or the generic impl depending on how specific it is.
Functionality that cannot be applied to all classes is defined in interfaces.
Specific implementations then implement the interface where appropriate.

~