The client uses them via the base class (java code) :
BaseClass baseObj1 = new DerivedClass("valueofreqdfeature");
//the required feature gets added to the map in the base class
Map<String, Object> features = Collections.singletonMap("requiredFeature1Name","requiredFeatureValue");
BaseClass newBaseObj = baseObj1.createNewConcreteFeature(features);
createNewConcreteFeature
would get only the requiredFeature values from the map and return an instance. This seems like a method that would be static in the derived class but then the client can't create derived class instances with an existing object. Is there a more elegant way of writing this? or does this have some applicable pattern?