Sub-Class "checker" does not override all virtual methods of abstract superclass 'ovm_subscriber"

class stack #(type T = int);
   local T items[];
   task push( T a ); ... endtask
   task pop( ref T a ); ... endtask
endclass

The above class defines a generic stack class that can be instantiated with any arbitrary type:
stack is; // default: a stack of int’s

I am taking an example from LRM to clarify further.
In the above example, the default type is int and hence I cannot reference a member of type T (example a.variable_in_a) even though I might actually pass a class object when I instantiate the above class. To quote from the LRM -

Any type can be supplied as a parameter, including a user-defined type such as a class or struct.

Is my observation correct? Is this a limitation?

As a side observation.
Polymorphism also has similar rules (a virtual function can only access variables available in the base class). But such restrictions are needed due to late binding (with my average OOPs understanding).