This is an abstract operation that must be implemented by derived classes to return the concrete class type.