I think you're complicating things. I also come from an OO background. C2 does have some OO concepts. Consider the following:
Object Types:
An Object Type is kind of like a class, with class variables (called instance variables in C2).
Setting 'instance variable' values on an Object Type (via the properties in the editor or programatically) sets them for new, spawned Object instances.
You cannot have an Object Type 'inherit' another.
Objects:
An Object is an 'instance' of an Object Type.
Setting 'instance variable' values on an Object instance (via the properties in the editor or programatically) sets them for just that Object instance, overriding the Object Type.
Families:
A Family is kind of like an abstract class, with class variables (called Family instance variables).
Object Types can 'inherit' from these by placing the Object Type into a Family (or more than one Family, for 'multiple inheritance').
You cannot have an Family 'inherit' another (cannot place a Family in a Family). So 'inheritance' is only one level deep.
Setting 'Family instance variable' values on an Object (via the properties in the editor or programatically) sets them for just that Object instance, overriding the Family.
Note: Effects and Behaviours work similarly to Instance variables on the above.
Apologies for any mistakes in the above, which I'm sure I'll be corrected on