INF1563 Programmation I


La surcharge


Redéfinition des champs

Exercice

class X {
  public int i;
}
class Y extends X {
  public int i;
  public void methode(){
    i = 0;             // champ défini dans Y
    this.i = 0;        // champ défini dans Y
    super.i = 1;       // champ défini dans X
    ((X)this).i = 1;   // champ défini dans X
  }
}
class Z extends Y {
  public int i;
  public void methode(){
    i = 0;            // champ défini dans
X Y Z

    this.i = 0;       // champ défini dans
X Y Z

    super.i = 1;      // champ défini dans
X Y Z

    ((Y)this).i = 1;  // champ défini dans
X Y Z

    ((X)this).i = 1;  // champ défini dans
X Y Z

  }
}

Redéfinition des méthodes (polymorphisme d'héritage)

Exemple :

public class Rectangle {
  double a, b;
  double perimetre(){
    return 2*a + 2*b;
  }
  public String toString(){
    return "Rectangle(" + a + "," + b + ")";
  }
}

class Carre extends Rectangle {
  // a = b
  double perimetre(){
    return 4*a;
  }

  public String toString(){
    return "Carre(" + a + ")";
  }

}

Généricité (polymorphisme paramétrique)

Exemple :

// calculer la somme des entiers entre premier et dernier
int somme(int premier, int dernier){
  ...
}
// calculer la somme des réels entre premier et dernier avec delta étant 0.1
double somme(double premier, double dernier){
  ...
}
//calculer la somme des réels entre premier et dernier avec delta donné
double somme(double premier, double delta, double dernier){
  ...
}

Polymorphisme ad hoc

Note

Le nom de polymorphisme vient du grec et signifie qui peut prendre plusieurs formes.