In reply to UVM_LOVE:
When you call
my_state1 = state::type_id::create("my_state1", null);
state is the original requested type. The create() method returns an object with the override type. Normally, the call to set_type_override_by_type() is in the top-level test, and the call to create() is in another class at a lower level.