Items in the base class extended from uvm_sequence_item in a VIP

While developing a VIP we have a base_class which extends the uxm_sequence_item and there we declare variables to be randomized, we also extend another class from this base class and there also we have items which are to be randomized and treated as stimulus to the DUT. My question is what goes in the decision making of the variables which are declared in the base class and the items which are there in the extended class?

Eg:

class base_trans extend uvm_sequence_item

rand bit[9:0] x;
rand bit[3:0] y;

endclass

class master_trans extends base_trans;

rand bit[3:0] p;
rand bit[2:0] q;

endclass
How do we decide as to which seq_item are to be declared in the base class?

In reply to 100rabhh:

This is one of the basic principles of object oriented programming(OOP). Things that are common to all of your extensions should go into your base class. You can only access extended things from a base class variable if you use a virtual method.

You may want to search for tutorials on SystemVerilog OOP. For example

SystemVerilog OOP for UVM Verification