Cours 4 : Héritage
Viviane Pons
Master BIBS Université Paris-Saclay
Une notion essentielle de la programmation objet : permet de “récupérer” et d’augmenter la structure d’une autre classe
super(...)
. Tout comme this(...)
, il doit être appelé en première commandeLa classe fille peut rajouter des méthodes supplémentaires et redéfinir (Override) les méthodes de la classe mère
public class PersonWithEmail extends Person {
...
public String getEmail() {
return email;
}
@Override
public String toString() {
return super.toString() + " -- email : " + getEmail();
}
}
Accès à la classe mère avec super
Person p1 = new Person("Bob");
System.out.println(p1);
Person p2 = new PersonWithEmail("Alice", "alice@mail.com");
System.out.println(p2);
Person 1 : Bob
Person 2 : Alice -- email : alice@mail.com
La classe déclarée décide ce qui se voit. La classe instanciée décide ce qui se fait.
En Java une classe ne peut héritée que d’une seule autre classe. (Ce n’est pas le cas dans d’autres langages comme le python ou le C++)
Avantage : la superclasse est toujours bien définie
Inconvénient : moins de souplesse, potentielle duplication de code, compensé en partie par l’utilisation de multiples interfaces
final
pour les classes et méthodesfinal
pour une classe (public final class MyCLass
) : ne peut pas être étendue (pas de classes filles). Exemple, la classe System
de l’API Java
final
pour une méthode : ne peut pas être redéfinie.
C’est une classe qui ne peut pas être instanciée ! Mais pourquoi ??
Réalisation d’un système dynamique avec une structure de classe complexe : Le TP