Programmation Orientée Objet – Java

Cours 4 : Héritage

Viviane Pons

Master BIBS Université Paris-Saclay

Qu’est-ce que l’héritage ?

Une notion essentielle de la programmation objet : permet de “récupérer” et d’augmenter la structure d’une autre classe

Exemple

Voir l’exemple ici

UML diagram: a class Person with private fields id and name and method toString. A class PersonWithEmail extending Person with extra field email

public class Person {
    
    private static int count = 0;

    private final int id;
    private final String name;
    
    ...
}
public class PersonWithEmail extends Person {
    
    private String email;

    ...

}

Constructeurs

    public PersonWithEmail(String name) {
        super(name);
    }
    
    public PersonWithEmail(String name, String email) {
        this(name);
        setEmail(email);
    }

Rajouter et redéfinir des méthodes

La 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

Polymorphisme

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.

Héritage unique / multiples

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éthodes

Classes Abstraites et structure classique

Qu’est-ce qu’une classe abstraite ?

C’est une classe qui ne peut pas être instanciée ! Mais pourquoi ??

Un schéma classique

Voir l’exemple ici

UML diagram: a interface Animal with subclass AstractAnimal implementing some of the methods and adding some protected methods. Two subclasses of AbstrastAnimal : sheep and wolf implementing the canEat method of the interface

Application

Réalisation d’un système dynamique avec une structure de classe complexe : Le TP