base class and derived classes