In reply to Jeff_Li_90:
It means the number of places that have to deal with the argument creeps up in number. This example only has one layer of class construction, but let’s add another layer.
class test;
env e;
function new(virtual i2c_intf i2c_vif);
e = new(i2c_vif);
endfunction
...
endclass
If you need to change the interface type, you have to change it in two places. Now lets and another env with a different virtual interface; you have to and another argument to the test class. In a typical UVM testbench, there are several layers of components (test->env->agent->driver). You don’t want to have to change all the intermediate level classes just because you made a change at the lowest level.