Java-Generikum eines anderen Generikums

Ich habe Schnittstelle:

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

und Klasse, die dies implementiert:

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

alles funktioniert gut bisher. Jetzt möchte ich GenericDAO erstellen. Warum kann ich das nicht erstellen ?:

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

Ich kann mein GenericDAO nur wie folgt deklarieren:

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

Und komplette Klasse:

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

Aber ich denke, es ist nutzlos, weil ich Informationen wiederhole. Ich habe bereits erklärt, dass Cat Identifable <Long> implementiert. Warum muss ich also GenericDAO <Cat, Long> und nicht nur GenericDAO <Cat> deklarieren?