Bonjour à toutes et à tous

Je patauge dans la création de classes avec généricité, notamment pour créer des constructeurs. Voici un exemple. Je crée une classe "Animal" qui a comme sous-classe "Chien". Je pourrais de même créer la classe "Chat", etc. Jusque là pas de problème. Et j'attaque la généricité en créant une classe "Couple" qui a comme variables (génériques) un male et une femelle. Je tente plusieurs écritures de constructeurs et... pas une ne se compile ! Voici l'objet du délit.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package testGenericite;
 
class Animal {
    public String espece ;
    public Animal (String espece) {this.espece = espece ;}
    public Animal (Animal parent) {this.espece = parent.espece ;}
}
class Chien extends Animal {
    public Chien () {super ("Chien") ;}
    public Chien (Chien parent) {super (parent) ;}
}
 
public class Couple <TypeAnimal extends Animal> {
    TypeAnimal male, femelle ;
    public Couple (String espece) {
        male = new Animal (espece) ;
        femelle = new Animal (espece) ;
    }
    public Couple (Animal male, Animal femelle) {
        this.male = male ;
        this.femelle = femelle ;
    }
    public Couple (Chien male, Chien femelle) {
        this.male = male ;
        this.femelle = femelle ;
    }
    public Couple (TypeAnimal male, TypeAnimal femelle) {
        this.male = male ;
        this.femelle = femelle ;
    }
    public Couple (Couple parents) { // tant pis pour la consangüinité
        male = new Animal (parents.male.espece) ;
        femelle = new Animal (parents.femelle.espece) ;
    } 
}
Alors, j'ai tout faux... Il y a une notion fondamentale qui m'échappe ?