define interface for creating an object, but let subclass decide which class to instantiate
virtual constructor