next up previous contents
suivant: Liaison dynamique, Occultation monter: Extension de classes précédent: Ajouter des variables ou   Table des matières

Liaison dynamique, Occultation

La liaison dynamique est le coeur de la programmation orientée objet.

Avec la liaison dynamique, la méthode appelée est celle correspondant au type de l'objet et non au type de la variable qui le référence. Il s'agit d'un procédé dynamique dans le sens où la méthode appelée est déterminée à l'exécution (par le type de l'objet référencé) et non à la compilation.



transparent
Extension


class B{
    public int i=0;
    public void f(){
      System.out.println(i);
    }
    public void g(){
      System.out.println(i);
    }
}
class A extends B {
    public int i=1;
    public void f(){
      System.out.println(i);
    }
    public void h(){
      System.out.println(i);
    }
}

class essai{
  public static void main(String[] args){
    A a = new A(); // a référence sur un objet A
    B b = new B(); // b référence sur un objet B
    b.f(); //0
    b.g(); //0
    a.f(); //1
    a.g(); //0
    a.h(); //1
    b=a;
    b.f(); //1
    b.g(); //0
    //b.h(); illégal
  }
}


On parle de remplacement ou de redéfinition (overriding) quand une fonction définie dans l'extension a la même signature que dans la superclasse. On aura dans ce cas liaison dynamique (l'association du nom au code n'est pas déterminée à la compilation mais à l'exécution).

Il y a surcharge (overlaoding) si des fonctions différentes et dans la même portée ont le même nom mais des signatures différentes (l'association du nom au code est déterminée à la compilation).

Si une variable d'instance d'une extension a le même nom qu'une variable d'instance d'une superclasse, elle cache ou occulte (hiding) cette variable de la superclasse : la variable de la superclasse existe encore mais n'est plus accessible par son nom simple. (on peut encore y accéder par le mot clé super).


next up previous contents
suivant: Liaison dynamique, Occultation monter: Extension de classes précédent: Ajouter des variables ou   Table des matières
Hugues Fauconnier 2002-01-11