What is the use of sequence overrides

I’m going through the sequence override and here is the snippet code. In the snippet code in run_phase we are starting 3 sequences which actually runs the same sequence sequentially. My question here is we can just run c_seq three times instead of a_seq, b_seq, c_seq. I know this article teaches about overriding by type/inst but i dont see the point of overrding.

// The build method of a test class:
// Inheritance:
// a_seq ← b_seq ← c_seq
function void build_phase( uvm_phase phase );
m_env = sot_env::type_id::create(“m_env”, this);
// Set type override
// Set instance override - Note the “path” argument see the line for s_a creation
// in the run method
a_seq::type_id::set_inst_override(c_seq::get_type(), “bob.s_a”);
endfunction: build

// Run method
task run_phase( uvm_phase phase );
a_seq s_a; // Base type
b_seq s_b; // b_seq extends a_seq
c_seq s_c; // c_seq extends b_seq

phase.raise_objection( this , “start a,b and c sequences” );

// Instance name is “s_a” - first argument,
// path name is “bob” but is more usually get_full_name() - third argument
s_a = a_seq::type_id::create(“s_a”,“bob”);
// More usual create call
s_b = b_seq::type_id::create(“s_b”);
s_c = c_seq::type_id::create(“s_c”);

s_a.start(m_env.m_a_agent.m_sequencer); // Results in c_seq being executed
s_b.start(m_env.m_a_agent.m_sequencer); // Results in c_seq being executed

phase.drop_objection( this , “a,b and c sequences done” );

endtask: run