3. Héritage

L'avantage d'un langage orienté-objets est que le code est réutilisable. Grâce à l'héritage, on peut modifier une classe sans avoir à la réécrire complètement. On dit que la classe nouvelle hérite de la classe ancienne. On dit aussi que nouvelle étend ancienne ou que nouvelle est dérivée de ancienne. nouvelle est alors une sous-classe de ancienne, et ancienne une super-classe (surclasse) de nouvelle.

Dans la pratique, cela signifie qu'une instance de nouvelle aura la possibilité d'utiliser des méthodes définies dans ancienne. Lorsque l'on code la classe nouvelle, on a la possibilité de remplacer des méthodes de la super-classe (classe parente), simplement en définissant une méthode avec le même nom et les mêmes paramètres. On remarquera qu'il n'est pas possible de remplacer un constructeur, puisque celui-ci porte le nom de la classe dans laquelle il est déclaré, et que le nom des deux classes diffère obligatoirement.

Nous disions précédemment qu'il est possible de modifier une classe sans avoir à la réécrire complètement. Pratiquement, on déclare des méthodes supplémentaires ou des méthodes portant le même nom que les méthodes de la super-classe. Dans ce dernier cas, on masque l'ancienne méthode. Le mot clé super désigne la classe parente et on peut alors faire appel à ses méthodes ou variables si celles-ci ont été masquées par des variables locales de même nom (voir visibilité des variables). Lorsque l'on écrit super.M(), on fait appel à la méthode M() de la super-classe.

En Java, toutes les classes sont dérivées de la classe spéciale Object. C'est la racine de la hiérarchie des classes. Cela veut dire que toutes les classes Java possèdent un certain nombre de méthodes. La documentation des API disponible chez Sun les explique.

Ci-dessous, vous trouverez la classe Crayon, et la classe CrayonCouleur qui l'étend.

Crayon

class Crayon {
    protected int longueur = 100;    // en millimetres
    protected int diametre = 5;    // en millimetres

    // cree un crayon standard
    public Crayon() {
    }

    // cree un crayon de longueur l et de diametre d
    public Crayon(int l,int d) {
        longueur = l;
        diametre = d;
    }
    
    public int quelleLongueur() {
        return longueur;
    }

    public int quelDiametre() {
        return diametre;
    }
    
    public void changeLongueur(int nouvelleLongueur) {
        longueur = nouvelleLongueur;
    }
        
}

CrayonCouleur

class CrayonCouleur extends Crayon {

    protected String couleur = "gris";

    public CrayonCouleur() {
        super();
    }
    
    public CrayonCouleur(int l,int d,String c) {
        super(l,d);    // initialise les variables longueur
                // et diametre en utilisant le
                // constructeur de la "superclass"
        couleur = c;
    }
    
    public CrayonCouleur(String c) {
        super();
        couleur = c;
    }
    
    public String quelleCouleur() {
        return couleur;
    }

    public void changeCouleur(String nouvelleCouleur) {
        couleur = nouvelleCouleur;
    }
}

Index général - Index concepts - Règles BNF
© 1996, DIP Genève, Alexandre Maret & Jacques Guyot
page générée Fri Jun 21 15:41:25 MET DST 1996