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 lignesuper(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 @Override sur 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.