This sounds similar to our class hierarchy, where we have a base class and other classes extend that base class. We have mapped our classes using sub-classes, e.g.
Code:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
  <class name="Domain.Model.Definition, Domain.Model" table="Definition" discriminator-value="Definition">
    <meta attribute="scope-class" inherit="false">public abstract</meta>
    <id name="Id" type="Persistence.NullGuidUserType, Persistence" column="Id">
      <generator class="assigned" />
    </id>
    <discriminator column="DEFINITION_TYPE" type="string" />
    <version name="Version" column="Version" type="Int32" unsaved-value="-1" />
   <subclass name="Domain.Model.ComputedAttributeDefinition, Domain.Model">
      <property name="AttributeDefinitionId" type="Persistence.NullGuidUserType, Persistence" column="AttributeDefinitionId"/>
   </subclass>
   <subclass name ="Domain.Model.ItemAttributeDefinition, Domain.Model" >
      <property name="ItemDefinitionId" type="Persistence.NullGuidUserType, Persistence" column="ItemDefinitionId"/>
   </subclass>
  </class>
</hibernate-mapping>
 
We have decided to use Table per class hierarchy, hence the use of a discriminator, but you can obviously choose table per sub-class if that suits you better.
We have also marked the base class as public abstract, as it is abstract ;), but if your base class can be instantiated then you obviously don't want to use that.
I recommend you get a copy of Hibernate In Action for a better expalantion than what I've given. 
Just be aware that this book requires *very* careful attention when reading it.