super pour invoquer une méthode redéfinie de la superclasse

           

Supposons :

Si, dans une des méthodes de la classe B, on veut faire appel à la méthode faire de la classe A, on peut utiliser le mot réservé super en invoquant super.faire(); cela peut être fait dans toute méthode de la classe B, y compris dans la méthode faire redéfinie dans la classe B ou dans un constructeur de la classe B.

Si une classe C étend à son tour la classe B et redéfinit aussi la méthode faire, on ne pourra pas, de la classe C, invoquer la méthode faire de la classe A. En effet, il est interdit d'écrire : super.super.faire();

Le programme (incomplet) ci-dessous montre l'utilisation du mot super.


class A {

void faire(){
...
}
}

class B extends A {

void faire() {
super.faire();
...
}

void pourquoiPas() {
...
super.faire();
...
faire(); // autrement dit : this.faire(); } }
Question : Une classe A définit une méthode faire sans paramètre (void faire() {...}). Elle est étendue par une classe B qui définit une méthode faire avec un paramètre entier (void faire(int n) {...}. Est-ce qu'on utilise ainsi la possibilité de redéfinir une méthode ou celle de la surcharge ?

© Irène Charon Télécom ParisTech 2012