Is it legal to have a handle to a class inside the same class?

Is this below code the right way of coding?
This seems to work, but I am not sure if will be any issues with the code? like performance e.t.c.
Thanks in advance.

typedef ext_class_1 ;
typedef ext_class_2 ;
typedef ext_class_3 ;

class base_class;
  base_class bc[3];
  ext_class_1 ec1;
  ext_class_2 ec2;
  ext_class_3 ec3;


  virtual function void display();
    $display("Inside base class");
  endfunction
  

  
  task test ;
    bc[0] = new();
    bc[1] = new();
    bc[2] = new();

    ec1 = new();
    ec2 = new();
    ec3 = new();
  
    bc[0].display();
    
    bc[0] = ec1 ;
    bc[0].display();
    
    bc[1] = ec2;
    bc[1].display();

    bc[2] = ec3 ;
    bc[2].display();

  endtask
  
endclass

// extended class 1
 class ext_class_1 extends base_class;
  function void display();
    $display("Inside extended class 1");
  endfunction

endclass

// extended class 2
class ext_class_2 extends base_class;
  function void display();
    $display("Inside extended class 2");
  endfunction
endclass

// extended class 3
class ext_class_3 extends base_class;
  function void display();
    $display("Inside extended class 3");
  endfunction
endclass

// module
module class_polymorphism;
  base_class bc;

  initial begin 
    bc=new();
    bc.test();
  end

endmodule

In reply to ANASKU:

This code is perfectly legal, but not recommended. Typically a base class has no dependencies on its derivatives.

In reply to dave_59:

Thank you Dave.

I have a follow up question, in one of your comments you explained how inheritance can be used to access child class methods.

https://verificationacademy.com/forums/uvm/can-we-call-child-class-parent-class

I am trying to do the same but not seeing as expected. Below is the code -

class base_class;

  virtual function void display1();
    $display("Inside base class display1");
  endfunction
  
  virtual function void display2();
    $display("Inside base class display2");
  endfunction
  
  virtual function void display3();
    $display("Inside base class display3");
  endfunction
  
endclass

// extended class 1
 class ext_class_1 extends base_class;
  function void display1();
    super.display1();
    $display("Inside extended class 1");
  endfunction

endclass

// extended class 2
class ext_class_2 extends base_class;
  function void display2();
    super.display2();    
    $display("Inside extended class 2");
  endfunction
  
  
endclass

// extended class 3
class ext_class_3 extends base_class;
  function void display3();
    super.display3();    
    $display("Inside extended class 3");
  endfunction
endclass

// module
module class_polymorphism;
  base_class bc;
  ext_class_1 ec1;
  ext_class_2 ec2;
  ext_class_3 ec3;
  
  initial begin 
    bc  = new();
    ec1 = new();
    ec2 = new();
    ec3 = new();    
    bc.display1();
    bc.display2();
    bc.display3();
  end

endmodule 

Output I am seeing :

Inside base class display1
Inside base class display2
Inside base class display3

What I was expecting :

Inside base class display1
Inside extended class 1
Inside base class display2
Inside extended class 2
Inside base class display3
Inside extended class 3

The extended class method was never called. What am I missing here?

In reply to ANASKU:
Hi,

You missed the handle assignment(parent_class_handle=child_class_handle). Chaeck this below code for clarification

class base_class;
 
  virtual function void display1();
    $display("Inside base class display1");
  endfunction
 
  virtual function void display2();
    $display("Inside base class display2");
  endfunction
 
  virtual function void display3();
    $display("Inside base class display3");
  endfunction
 
endclass
 
// extended class 1
 class ext_class_1 extends base_class;
  function void display1();
    super.display1();
    $display("Inside extended class 1");
  endfunction
 
endclass
 
// extended class 2
class ext_class_2 extends base_class;
  function void display2();
    super.display2();    
    $display("Inside extended class 2");
  endfunction
 
 
endclass
 
// extended class 3
class ext_class_3 extends base_class;
  function void display3();
    super.display3();    
    $display("Inside extended class 3");
  endfunction
endclass
 
// module
module class_polymorphism;
  base_class bc;
  ext_class_1 ec1;
  ext_class_2 ec2;
  ext_class_3 ec3;
 
  initial begin 
    bc  = new();
    ec1 = new();
    ec2 = new();
    ec3 = new(); 
    bc=ec1;
    bc.display1();
    bc=ec2;
    bc.display2();
    bc=ec3;
    bc.display3();
  end
 
endmodule