DogImpl

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

import curam.inheritance.Dog;
import curam.inheritance.struct.DogDtls;

public class DogImpl extends AnimalImpl<DogDtls> implements Dog {

  protected DogImpl() {
  }

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

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

  }

  public String getName() {
    return getDtls().name;
  }

  public void setName(String value) {
    getDtls().name = value;
  }

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

  public void crossFieldValidation() {
    // none required
  }

  public void crossEntityValidation() {
    // none required
  }

  public void mandatoryFieldValidation() {
    // none required
  }

  public void setNewInstanceDefaults() {
    // none required
  }

}

The structure of this class is similar to CatImpl above.