К сожалению, параметризованные классы с различными значениями параметров ( специализации - это терминология LRM) обрабатываются как отдельные типы классов, поэтому вам необходимо предоставить переопределение для каждого значения параметра.
seq_item#(10)::type_id::set_type_override(extended_seq_item#(10)::get_type());
seq_item#(20)::type_id::set_type_override(extended_seq_item#(20)::get_type());
seq_item#(30)::type_id::set_type_override(extended_seq_item#(30)::get_type());
Если вы можете получить этот код в месте, где A уже параметризован, как в build_phase параметризованного env или агента, то это может быть не так болезненно, как описано выше.
Теперь, когда я вижу больше кода, проблема в том, что область видимости класса в этой строке должна быть перехвачена как ошибка
adapter = reg_adapter::type_id::create("adapter");
должно быть записано как
adapter = reg_adapter#(10)::type_id::create("adapter");