L’héritage est un concept fondamental de la POO (programmation orientée objet). Il représente une relation de type EST-UN. En programmation, cela veut littéralement dire la même chose qu’en anglais : hériter de caractéristiques d’un parent (en programmation, ces caractéristiques sont généralement des fonctions et des variables).
Prenons une classe Animal, comme ci-dessous :
//Creating an Animal class with bark() as a member function.
public class Animal {
public void bark() {
System.out.println("This is an animal");
}
}
Animal est une classe parente, car les propriétés de cette classe peuvent être étendues à tous les animaux en général.
Prenons un animal nommé Lion, avec une classe comme celle-ci :
//Lion class is a child class of Animal.
public class Lion extends Animal {
@Override
public void bark() {
System.out.println("Lion here!!");
}
}
L’annotation Override indique qu’une méthode d’une sous-classe redéfinit une méthode de sa superclasse.
Elle n’est pas strictement nécessaire, mais c’est une bonne pratique de l’utiliser.
Maintenant, chaque fois qu’on écrit :
Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();
Remarque : on initialise la classe Animal avec Lion.
Le résultat ressemblera à ceci :
Lion here!!
Selon la POO, il existe de nombreux types d’héritage, mais Java n’en prend en charge que quelques-uns (multi-niveaux et hiérarchique). Pour en savoir plus, lis ceci.
Dans cet exercice, on joue à un jeu de rôle où différents types de combattants peuvent s'affronter. Le jeu a des règles différentes pour chaque type de combattant. On va se concentrer sur deux types bien précis : les Wizards et les Warriors.
Pour un Warrior, voici les règles :
6 points de dégâts si le combattant qu'il attaque n'est pas vulnérable.10 points de dégâts si le combattant qu'il attaque est vulnérable.Pour un Wizard, voici les règles :
12 points de dégâts s'il a préparé un sort à l'avance.3 points de dégâts s'il n'a pas préparé de sort à l'avance.Crée une nouvelle classe appelée Warrior.
Cette classe doit hériter de la classe Fighter existante.
Mets à jour la classe Warrior pour que sa méthode toString() décrive le type de combattant qu'il représente.
La méthode doit renvoyer la string "Fighter is a Warrior".
Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"
Mets à jour la classe Warrior pour que sa méthode isVulnerable() renvoie toujours false.
Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false
Mets à jour la classe Warrior pour que sa méthode getDamagePoints(Fighter) calcule les dégâts infligés par un Warrior selon les règles ci-dessus.
Warrior warrior = new Warrior();
Wizard wizard = new Wizard();
warrior.getDamagePoints(wizard);
// => 10
Crée une autre nouvelle classe appelée Wizard.
Cette classe doit aussi hériter de la classe Fighter existante.
Mets à jour la classe Wizard pour que sa méthode toString() décrive le type de combattant qu'il représente.
La méthode doit renvoyer la string "Fighter is a Wizard".
Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"
Mets à jour la classe Wizard pour ajouter une méthode appelée prepareSpell().
La classe doit se souvenir du moment où cette méthode est appelée et faire en sorte que sa méthode isVulnerable() ne renvoie false que lorsqu'un sort est préparé.
Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false
Mets à jour la classe Wizard pour que sa méthode getDamagePoints(Fighter) calcule les dégâts infligés par un Wizard selon les règles ci-dessus.
Wizard wizard = new Wizard();
Warrior warrior = new Warrior();
wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.