Contenu du cours
Java POO
Java POO
Principes de la POO : Héritage
Héritage
Abordons le principe de la POO - l'Héritage.
L'héritage est un mécanisme qui permet la création de classes à partir d'une autre classe.
- La classe qui sert de base est appelée parent ou superclasse ;
- La classe créée à partir de la classe parente est appelée enfant, sous-classe ou descendante.
Ainsi, la classe enfant peut hériter des caractéristiques et propriétés d'une autre classe - la classe parente (ses méthodes et variables).
Vous pouvez hériter d'une classe en utilisant le mot-clé extends
. La syntaxe pour qu'une classe enfant hérite d'une classe parente est la suivante :
Child.java
class Child extends Parent { // properties and methods }
Examinons un exemple illustrant le fonctionnement de l'héritage dans le code. Nous avons une classe Bird
avec certains champs et méthodes, et il existe une classe Parrot
avec ses propres champs et méthodes. Un perroquet est un oiseau, donc logiquement, le perroquet doit hériter de la classe Bird
:
Voici le code de la capture d'écran, réécrit pour une meilleure lisibilité et clarté :
Bird.java
Parrot.java
Main.java
package animals.birds; public class Bird { public String color; public boolean canFly; public int maxAge; public void eat() { System.out.println("The bird is eating"); } public void fly() { if (canFly) { System.out.println("The bird is flying!"); } else { System.out.println("This bird can't fly :("); } } }
Analysons ce qui se passe dans ces illustrations :
- Création d'une classe
Bird
, qui constitue la classe parente dans ce cas. Cette classe possède ses propres champs et méthodes ; - Création d'une classe
Parrot
, qui utilise le mot-cléextends
pour hériter de la classe parenteBird
. La classeParrot
est une classe enfant et possède ses propres champs et méthodes. De plus, en tant que classe enfant,Parrot
hérite de tous les champs et méthodes de la classe parenteBird
; - Création d'un objet de la classe
Parrot
dans la méthodemain
et constatation que l'on peut initialiser les champs des classes parente et enfant. On initialise d'abord les champs de la classe parenteBird
, puis ceux de la classe enfantParrot
. Ensuite, on appelle les méthodes : d'abord celles de la classe parente, puis celle de la classe enfant.
Ainsi, l'héritage a été utilisé pour hériter de la classe Bird
.
Pourquoi faire cela ?
Lorsque l'on dispose de nombreuses sous-classes de Bird
, pas seulement Parrot
, mais aussi par exemple Pigeon
et Penguin
, on se retrouve avec de nombreux champs dupliqués, comme boolean canFly
. L'héritage permet avant tout d'éviter la duplication de fragments de code.
De plus, cela améliore considérablement la lisibilité. En pratique, il est rare de rencontrer directement la classe Bird
et ses sous-classes, mais l'héritage est couramment utilisé, notamment avec les interfaces.
Remarque
Vous découvrirez les interfaces dans la prochaine section de ce cours.
Règles de l'héritage
-
Hériter d'une seule classe. Java ne prend pas en charge l'héritage multiple. Une classe ne peut avoir qu'un seul parent ;
-
Tout est hérité sauf les variables et méthodes
private
.
Remarque
Il est impossible d'hériter de soi-même !
Précédemment, il a été mentionné qu'une sous-classe aurait accès à toutes les variables et méthodes de la classe parente. Cependant, ce n'est pas tout à fait exact.
En réalité, toutes les méthodes et variables marquées avec le modificateur private
ne sont pas accessibles à la sous-classe.
- Redéfinir la méthode de la classe parente.
Imaginons que l'on hérite d'une classe, mais que certaines parties du code hérité ne conviennent pas. Supposons que l'on souhaite qu'une méthode spécifique fonctionne différemment de celle de la classe parente.
Pour redéfinir une méthode de la classe parente, il suffit d'écrire @Override
au-dessus de celle-ci :
Parrot.java
@Override public void eat() { System.out.println("The parrot is eating"); }
Dans le code ci-dessus, nous avons redéfini la méthode de la classe parente, et désormais, lorsque cette méthode est appelée depuis la classe enfant, la méthode redéfinie sera invoquée !
- Prévention de l'héritage.
Si vous ne souhaitez pas que votre classe soit héritée, utilisez le modificateur final
devant celle-ci.
Par exemple :
Bird.java
Parrot.java
public final class Bird { // fields and methods }
De cette manière, en utilisant le mot-clé final
, nous avons interdit l'héritage de la classe Bird
.
Ce ne sont que les règles fondamentales et les principales caractéristiques de l'héritage. Il s'agit d'un sujet vaste que vous utiliserez très fréquemment. Tout au long du cours, vous vous familiariserez avec d'autres aspects de l'héritage et les utiliserez plus souvent.
1. Pourquoi avons-nous besoin de l'héritage en Java ?
2. Combien de classes pouvons-nous hériter en même temps ?
3. Comment peut-on empêcher l'héritage en Java ?
Merci pour vos commentaires !