5.2 Classes parent et enfant
La classe parent doit avoir une visibilité public.
Les attributs de la classe parent doivent être en visibilité protected afin qu’ils soient accessibles aux classes enfants.
Une classe enfant ne peut hériter que d’une seule classe mère, identifiée dans sa signature avec extends :
public class maClasseEnfant extends uneSeuleClasseMere {}
Elle récupère alors tous les attributs du parent :
- pas besoin de répéter les attributs de la classe mère dans la définition de la classe enfant
- possible d’ajouter de nouveaux attributs normalement
Le constructeur de la classe enfant peut venir compléter le constructeur parent :
- on répète dans la signature tous les paramètres nécessaires
- on appelle le constructeur parent avec en première ligne
super(liste des parametres deja decrits dans le parent); - on complète le constructeur avec les autres paramètres normalement :
this.param=...
La classe enfant récupère également toutes les méthodes du parent, qui peuvent être utilisées telles quelles ou bien substituées.
La substitution d’une méthode se fait :
- en indiquant
@Overridesur la ligne avant la signature de la méthode à substituer - en définissant la méthode comme on le souhaite mais avec exactement le même nom
- il est possible de se baser sur la méthode mère grâce à
super.meth()puis de la compléter
Lors de l’appel d’une méthode avec une instance ou une classe enfant, l’appel remonte l’arbre généalogique : si elle est définie dans la classe enfant, c’est celle-ci qui sera utilisée, sinon celle de la classe parent, sinon celle de la classe encore au dessus etc, jusqu’à la trouver.