Can I use an extend class in function with an arguments?

In reply to verified:

Are you sure you’re running the same code in your post?


class A ; 
  virtual function void disp (); 
    $display(" Non-Virtual from A "); 
  endfunction
  virtual function void vdisp (); 
    $display(" Virtual from A "); 
  endfunction
endclass 

class EA extends A ;
  virtual function void disp (); 
    $display(" Non-Virtual from EA "); 
  endfunction
  virtual function void vdisp (); 
    $display(" Virtual from EA "); 
  endfunction
endclass 

module main ; 
  function void disp( A a);
    a.disp();
    a.vdisp();
  endfunction

  A my_a; 
  EA my_ea;
  initial 
    begin 
      my_a = new(); 
      my_ea = new(); 

      disp(my_a); 
      disp(my_ea); 

    end 
endmodule

With the code above, result should be:


Non-Virtual from A 
 Virtual from A 
 Non-Virtual from EA 
 Virtual from EA 

It’s how polymorphism work in SystemVerilog. You declare parent’s functions with virtual, then when you pass child object to parent argument of disp, these virtual functions in parent will be completely overridden by child’s functions.

If you don’t want parent’s functions to be overridden, remove virtual keyword.