Java genérico de otro genérico

Tengo interfaz:

interface Identifable<T extends Serializable> {
      T getID();
}

y la clase que implementa esto:

public class Cat implements Identifable<Long> {
       public Long getID(){...};
}

todo funciona bien hasta aquí. Ahora quiero crear GenericDAO, ¿por qué no puedo crear esto ?:

public abstract GenericDAO<T extends Identifable<S>> {
    T getByID(S id);
}

Solo puedo declarar mi GenericDAO como esto:

public abstract GenericDAO<T extends Identifable, S> {
  T getById(S id);
}

Y completar la clase:

public CatDAO extends GenericDAO<Cat, Long> {
      Cat getById(Long id);
}

Pero creo que es inútil, porque repito información. Ya declaré que Cat implementa Identifable <Long>, ¿por qué debo declarar GenericDAO <Cat, Long>, no solo GenericDAO <Cat>?

Respuestas a la pregunta(2)

Su respuesta a la pregunta