Why does new() construction start extended class not base class?

Trying to understand the order of new().
Mostly extended class constructed by new() firstly then it assigns to the base class.
Is there any reason not construct base class first then extended class?


   C c= new;
   D d = c; 
   


module top;
   class C;
      virtual function void print();
         $display("I am C");
      endfunction
   endclass

   class D extends C;
      virtual function void print();
         $display("I am D");
      endfunction
   endclass
	
   D d = new;
   C c = d; 
   
   initial begin
      c.print();
      $finish;
   end
endmodule

In reply to UVM_LOVE:

A couple of problems here.

The statement

D d = c; 

is illegal. You cannot make an assignment from a base type variable to an extended class variable without a dynamic $cast. And that cast would fail because you cannot store a base object handle in an extended class variable.

The other problem is the order of static variable initialization, which is undefined in SystemVerilog.

 D d = new;
 C c = d;

There is no guarantee that an object handle gets placed in d before assigning it to c.