DogImpl

Figure 1. One table per class - implementation of another concrete class
package curam.inheritance;

import curam.inheritance.Dog;
import curam.inheritance.struct.DogDtls;
import curam.test.codetable.ANIMAL_TYPE;

class Dog extends Animal<Dog, DogDtls> implements Dog {

  protected Dog() {
  }

  @Override
  protected String getDiscriminatorValue() {
    return ANIMAL_TYPE.DOG;
  }

  @Override
  protected void mapBaseKeyToConcreteDtls() {
    getConcreteRowDtls().animalID = getBaseRowDtls().animalID;
  }

  public String getFavouriteTrick() {
    return getConcreteRowDtls().favouriteTrick;
  }

  public void setFavouriteTrick(final String value) {
    getConcreteRowDtls().favouriteTrick = value;
  }

  public void speak() {
    System.out.println("Woof!  My name is " + getName()
        + " and I like to " + getFavouriteTrick());
  }

  public void setNewInstanceDefaults() {// none required
  }

  public void crossFieldValidation() {// none required
  }

  public void crossEntityValidation() {// none required
  }

  public void mandatoryFieldValidation() {// none required
  }

}

The structure of this class is similar to CatImpl above.