Liaison dynamique - Tardive
Bonjour,
Alors j'ai eu un examen au CNAM hier soir et je me posé une petite question.
Le contexte :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
public interface Tache
{
string getNom();
int getCout();
}
public class TacheElementaire implements Tache
{
public string getNom()
{
...
}
public int getCout()
{
...
}
}
public class TacheComplexe implements Tache
{
public string getNom()
{
...
}
public int getCout()
{
...
}
}
public class Handler
{
public Handler()
{
ArrayList<Tache> myListTache = new ArrayList<Tache>();
myListTache.add(new TacheComplexe());
myListTache.add(new TacheElementaire());
for(Tache tache in myListTache)
{
this.print(tache);
}
}
public void print(TacheComplexe tc)
{
system.out.println("Tache Complexe !");
}
public void print(TacheElementaire te)
{
system.out.println("Tache Elementaire !");
}
public void print(Tache t)
{
system.out.println("Tache !");
}
} |
Alors moi, je dis que print(Tache tache) ne sera jamais appelé car, à cause de la lisaison dynamique à l'éxécution, tache est forcément soit un TacheComplexe soit un TacheElementaire, donc une des deux autres méthodes sera appelé et que donc le résultat de ceci est :
Code:
1 2
| TacheComplexe !
Tache Elementaire ! |
Une pote me soutient que, non, ça sortira ceci :
J'ai bon ? Ou pas ?
Edit : bon ben j'ai écrit le code, j'ai compilé et j'ai éxécuté. Mon pote a raison, j'ai bien Tache ! Tache !.
Donc j'ai rien pigé à la liaison dynamique. Donc j'ai perdu au moins 2 pts. :aie: