Une classe dérivée de score

Classe dérivée

Pour les besoins d'un programme de jeu particulier, nous voudrions pouvoir gérer le score d'un joueur, mais aussi le nombre d'essais qui ont été effectués pour obtenir ce score. Nous disposons déjà d'une classe score pour la gestion du score proprement dit, mais celle-ci ne prend pas en compte le nombre d'essais. Pour éviter de refaire le travail effectué sur la classe score, nous allons créé une classe dérivée de la classe score : celle-ci aura d'une part tous les champs (non privés) et toutes les méthodes (non privées) de la classe score (c'est ce qu'on appelle l'héritage) et d'autre part de nouveaux champs et de nouvelles méthodes.

La déclaration de cette nouvelle classe score2 se fait en utilisant le mot-clé extends de la manière suivante :

	public class score2 extends score {
	 private int nbEssais;
	}

La classe score2 hérite des champs et des méthodes de la classe score, certaines devront être complétées.

Surcharge des constructeurs

Les deux constructeurs de la classe score doivent être complétés pour initialiser le champ nbEssais.
	public score2() {
	 super();
	 nbEssais=0;
	}
 
	public score2(String nom) {
	 super(nom);
	 nbEssais=0;
	}

Le mot-clé super permet de faire référence à la classe parente, c'est à dire ici la classe score. Ainsi on commence par appeler le constructeur hérité, puis on initialise le champ nbEssais.

Surcharge de méthodes

Nous allons surcharger la méthode setScore de la classe score pour que chaque mise à jour du score s'accompagne d'une augmentation du nombre d'essais.

	public void setScore(int sco) {
	 super.setScore(sco);
	 nbEssais++;
	}

On utilise la même déclaration que dans la classe parente et on utilise la méthode héritée grâce au mot-clé super.

Ajout de méthodes

Ajoutons une méthode getNbEssais qui permet de lire le contenu du champ nbEssais qui a été déclaré private.

	public int getNbEssais() {
	 return nbEssais;
	}

La nouvelle classe score2 peut maintenant être utilisée.

Exemple d'utilisation

Le programme suivant simule un jeu qui consiste à lancer des dés jusqu'au moment où on obtient un total de 21 points.

	public class jeu21 {
 
	 public static void main(String args[]) {
	  Double D;
	  int tirage;
	  score2 pierre=new score2("Pierre");
	  while (pierre.getScore()<21) {
	   D=new Double(6*Math.random()+1);
	   tirage=D.intValue();
	   pierre.ajoute(tirage);
	   pierre.affiche();
	  }
	  System.out.println("Pierre a gagné en "+
	   pierre.getNbEssais()+" coups.");
	 }
	}

Copier, compiler et exécuter ce programme.

Conclusion

La possibilité de construire des classes dérivées de classes existantes est particulièrement importante : elle nous permet de récupérer les nombreuses classes définies dans le JDK et nous dispense ainsi de l'écriture d'une importante quantité de code.



Retour au menu