create abstract class implementation