How uvm parent sequence class body method is called

In reply to dave_59:

Hi Dave,
sorry for asking again.

my doubt is start method is not defined in the following example and it is defined in the uvm_base_sequence. mem_sequence_obj.start(sequencer) is called from test case. then this start is calling the uvm_sequence_base class start.but wait_for_grant is defined in the mem_sequence .could you please provide clarification how body method of mem_sequence is called.


   
class mem_sequence extends uvm_sequence#(mem_seq_item);
   
  `uvm_sequence_utils(mem_sequence,mem_sequencer)
   
  //Constructor
  function new(string name = "mem_sequence");
    super.new(name);
  endfunction
   
  virtual task body();
 
    req = mem_seq_item::type_id::create("req");
    wait_for_grant();
    req.randomize();
    send_request(req);
    wait_for_item_done();
 
  endtask
   
  endclass