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

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 2010