In reply to dharamvir:
It depends on whether the base class was ever intended to be used alone, or does it have to be extended to be useful. uvm_object and uvm_component are declared as virtual classes and can never be constructed directly. But unfortunately, you can’t declare a base class as virtual and still register it with the factory (this might be fixed in an upcoming version of the UVM).
So if you are going to have multiple extensions from the base class and want to be able to switch between different extensions, you need to create the base class and then override it.