I think these base classes need to define the intended interface a bit more clearly by having unimplemented versions of the methods sub-classes are supposed to implement?