generate abstract implementation class