Pour terminer avec les objets, il nous reste une notion importante à aborder : l'héritage.
Nous allons créer une nouvelle classe (la classe magicien) qui héritera de la classe personnage (on dira que la classe magicien sera la classe fille et personnage sera la classe parente).
Pour une fois, ce terme d'héritage est bien approprié à la situation. En effet, la classe magicien va hériter de toutes les méthodes et de tous les attributs de la classe personnage (une instance de magicien aura un nom et des points de vie, comme une instance de personnage, et pourra utiliser les méthodes de la classe personnage). Alors quel est l'intérêt de créer une nouvelle classe ? Eh bien, l'instance de magicien aura un attribut supplémentaire (pointDeMagie) et une méthode supplémentaire (lancerDesSorts). En tout, une instance de magicien aura 3 attributs (2 hérités de la classe personnage (vie et nom) et 1 qui lui est propre (pointDeMagie)) et 3 méthodes (2 hérités de la classe personnage et 1 propre)
La mise en place de l'héritage est très simple, puisqu'il suffit d'utiliser le mot "extends" suivi du nom de la classe parente, dans notre exemple, on définira la classe magicien comme suit :
class Magicien extends Personnage
Saisissez, analysez et testez ce code
Magicien gandalf;
class Personnage {
int vie;
String nom;
Personnage(int nbrVie, String nomPerso){
vie=nbrVie;
nom=nomPerso;
}
void afficheEtat(){
println ("Il reste "+vie+" points de vie à "+nom);
}
void perdVie (){
println (nom+" subit une attaque, il perd une vie");
vie=vie-1;
}
}
class Magicien extends Personnage {
int pointDeMagie;
Magicien(int nbrVie, String nomPerso, int magie){
super (nbrVie, nomPerso);
pointDeMagie=magie;
}
void lancerDesSorts(){
println(nom+" fait de la magie");
pointDeMagie=pointDeMagie-1;
println("Il reste "+pointDeMagie+" points de magie à "+nom+".");
}
}
void setup(){
gandalf = new Magicien(20,"Gandalf",15);
gandalf.afficheEtat();
gandalf.perdVie();
gandalf.afficheEtat();
gandalf.lancerDesSorts();
}
Une ligne doit particulièrement attirer votre attention :
super (nbrVie, nomPerso);
Le mot clé "super" permet d'appeler le constructeur de la classe parente (sans cette ligne, le constructeur de la classe Personnage ne serait pas exécuté et les attributs "vie" et "nom" ne serait pas initialisés. "super" prend en paramètres les paramètres attendus par le constructeur de la classe Personnage.
Nous aurons, un peu plus tard, l'occasion de mettre en œuvre l'héritage.