if this class is public it can't have an impl class as constructor param