What is the use and advantage of create() method instead of new() method while creating a handle of a class?

m_env_cfg = my_env_config_obj::type_id::create(“m_env_cfg”);
m_env = my_env::type_id::create(“my_env”, this);

what is the meaning of these two above lines…
and why we use this instead of new() method in uvm?
and also want to know the difference between create() method and new() method?

In reply to madhuri89:

// As my_env_config_obj is extended from uvm_object, create method
// requires object name only.
m_env_cfg = my_env_config_obj::type_id::create("m_env_cfg");

// my_env is extended from uvm_component and it requires name as well as parent 
// type name, given by 'this'
m_env = my_env::type_id::create("my_env", this);

We use create() method because, if any overrides are registered with the factory, the create method returns object of override type(by type I mean type of class). So, basically we get child object on parent handle if overrides are registered. Whereas new() method returns object of type its being called on.

In reply to mayurkubavat:

And we want to use the factory so we can override what class type gets constructed from the top-level test without having to modify the class that would normally be calling new(). See my DVCon paper on the factory as well as my short course on OOP design patterns (especially the 3rd session).