implementations of abstract base class functions