In reply to itsmyturn:
Extending a class with another parameter does not override the parameter inside the base class, it just adds another parameter.
What you can do is
class A extends uvm_object;
`uvm_object_utils(A)
// put anything that is not dependent on the WIDTH in this class
endclass
class B #(int width) extends A;
// no factory registration
endclass
class B16 extends B#(16);
`uvm_object_utils(B16)
endclass
run test with +uvm_set_type_override=A,B16