Why can my package not keep locally visible?

I implement 2 packages, each of which encapsulates some classes and is used in top tb.sv, shown as below
package scp_sam_pkg;

 class css_regs_info extends reg_file_info;
 ... //unique member values
 endclass
...
class scp_regs_info_generator extends regs_info_generator;
 virtual function void gen_regs_info(ref reg_file_info q[$]);
  reg_file_info inst;
  inst = css_regs_info::new;
  q.push_back(inst);
  ...
 endfunction
endclass: scp_regs_info_generator
endpackage: scp_sam_pkg
package ap_sam_pkg;
 class css_regs_info extends reg_file_info;
 ... //unique members value
 endclass
class ap_regs_info_generator extends regs_info_generator;
 virtual function void gen_ap_regs_info(ref reg_file_info q[$]);
  reg_file_info inst;
  inst = css_regs_info::new;
  q.push_back(inst);
  ...
 endfunction
endclass: ap_reg_info_generator
endpackage: ap_sam_pkg

in tb.sv:
   import scp_sam_pkg::scp_regs_info_generator;
   import ap_sam_pkg::ap_regs_info_generator;
    initial begin
	...
      if($test$plusargs("scp_sam_verif_on")) begin
             `uvm_info("TB", "SCP Access to NAQU SAM", UVM_LOW);
             generator = scp_regs_info_generator::new;
             generator.gen_regs_info(naqu_regs_info);
         end
         else if($test$plusargs("ap_sam_verif_on")) begin
             `uvm_info("TB", "Access to AP SAM", UVM_LOW);
             generator = ap_regs_info_generator::new;
             generator.gen_regs_info(naqu_regs_info);
         end

	...
    end

I hope to get the handler of ap_sam_pkg::css_regs_info using ap_regs_info_generator::gen_regs_info(), but I actually get the handler of scp_sam_pkg::css_regs_info.
Could anyone explain to me why this happens?
by the way I notice in the build log that scp_sam_pkg::css_regs_info is parsed
before ap_sam_pkg::css_regs_info. does it matter?

In reply to Louie Tong:
You need to show us the code used to determine which handle you have. Where is it?

In reply to Louie Tong:
let me simply this quetion. please see the following code snippet:

package scp_sam_pkg;
class css_regs_info;
...
endclass
function void gen_scp_regs_info();
reg_file_info inst;
inst = css_regs_info::new;
...
endfunction
endpackage
package ap_sam_pkg;
class css_regs_info;
...
endclass
function void gen_ap_regs_info();
reg_file_info inst;
inst = css_regs_info::new;
...
endfunction
endpackage

in tb.sv:
import scp_sam_pkg::gen_scp_regs_info;
import ap_sam_pkg::gen_ap_regs_info;
initial begin
...
gen_ap_regs_info(); 
...
end

My question is when gen_ap_regs_info() is called, which css_reg_info should be referenced, scp_sam_pkg::css_reg_info or ap_sam_pkg::css_reg_info?
simulation result show that scp_sam_pkg::css_reg_info is used, why? does it conform to local visibility of package?

In reply to Louie Tong:

You need to show a complete example. This works for me.

package rf;
class reg_file_info;
  virtual function void print;
  endfunction
endclass
endpackage

package scp_sam_pkg;
import rf::*;
class css_regs_info extends reg_file_info;
    virtual function void print;
      $display("from scp_sam_pkg");
    endfunction  
endclass
function void gen_scp_regs_info();
  reg_file_info inst;
  inst = css_regs_info::new;
  inst.print;
endfunction
endpackage
package ap_sam_pkg;
import rf::*;
class css_regs_info extends reg_file_info;
  virtual function void print;
    $display("from ap_sam_pkg");
  endfunction  
endclass
function void gen_ap_regs_info();
  reg_file_info inst;
  inst = css_regs_info::new;
  inst.print;
endfunction
endpackage
 
module tb;
  import scp_sam_pkg::gen_scp_regs_info;
  import ap_sam_pkg::gen_ap_regs_info;
  initial begin
    gen_ap_regs_info(); 
  end
endmodule