INFO-H-301

Programmation orientée objet

TP 3

Héritage

Presenter Notes

Héritage

  • L'héritage est un concept OO qui consiste à spécialiser des classes en réutilisant les attributs et le comportement d’une autre classe.
  • Vocabulaire : Une classe (sous-classe, classe fille, classe dérivée) peut être dérivée d’une autre classe (super-classe, classe mère).
  • L’héritage est un des concept principal de l’OO : réutiliser du code.

En Java

  • Si on ne précise pas de quelle classe on hérite, on hérite automatiquement de la classe Object qui définit le comportement commun de tous les objets Java (dont toString()).
  • On ne peut hériter que d’une seule classe.
  • La sous-classe hérite des membres (attributs et méthodes) de la super-classe.
  • Un constructeur n’est pas un membre donc n’est pas hérité mais on peut appeler le constructeur de la super classe.
  • http://java.sun.com/docs/books/tutorial/java/IandI/subclasses.html

Presenter Notes

En Java

L'héritage se dénote par le mot-clef extends.

public class Person {
    private String firstName;
    private String lastName;
    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
public class Employee extends Person {
    private Employee supervisor = null;
    public Employee(String fn, String ln, Employee supervisor) {
        super(fn, ln); // réutilisation du constructeur de Person
        this.supervisor = supervisor;
    }
}

Presenter Notes

Héritage et protection

  • Une sous-classe hérite de tous les membres (méthodes et attributs) de sa super-classe.
  • Une sous-classe peut utiliser les membres public et protected de sa super-classe quel que soit le package.
  • Si les deux classes sont dans le même package, la sous-classe peut en plus utiliser les membres package-private de sa super-classe.
  • Une classe ne peut hériter que :
    • d’une classe public
    • d'une classe package-protected qui se trouve dans le même package.

Presenter Notes

Masquer et redéfinir

  • Une sous-classe peut déclarer un nouvel attribut de même nom qu’un attribut de la super-classe et donc le masquer (hiding) (non recommandé).
  • Une sous-classe peut déclarer une nouvelle méthode d’instance avec la même signature qu’une méthode de la super-classe et donc la redéfinir (override).
  • On peut déclarer une nouvelle méthode statique de même signature et donc la masquer (hiding).

Presenter Notes

Masquer et redéfinir

  • Définir une méthode dans la sous-classe avec la même signature qu’une méthode de la super-classe :
  Méthode d'instance de la superclasse Méthode statique de la superclasse
Méthode d'instance de la sous-classe Redéfinition (override) Erreur de compilation
Méthode statique de la sous-classe Erreur de compilation Dissimulation (hiding)
  • Le mot clé final permet :
    • Sur une méthode, d'interdire sa redéfinition dans une sous-classe.
    • Sur une classe, d'en interdire l'héritage.

Presenter Notes

Redéfinition de méthode d'instance

public class Person
{
    [...]
    public void toString() {
        return firstName+" "+lastName;
    }
    [...]
}
public class Student extends Person
{
    private int idNumber;
    public void toString() {
        return super.toString() + ". Id number is "+this.idNumber;
        //super.toString() appelle la méthode toString() de la
        //classe Person
    }
}

Presenter Notes

Les Listes

ArrayList<Person> myList = new ArrayList<Person>();
myList.add(new Person("Jean"));
myList.add(new Person("Hugues"));
for(Person p : myList) {
    System.out.println(p);
}

Presenter Notes