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
|
Personnne a = new Personne () ;
Personne ab = new Etudiant () ;
Etudiant b = new Etudiant();
// partie 1
System.out.println (a.f(a)); // OK cet appel est simple il va retourner 1
System.out.println (a.f(ab));// OK le type declaré de a est A je cherche dans A la méthode qui a le même nom ( et le nombre d'argument ) que celle que j'appelle,dans mon cas
// c'est f ( Personne p ), je cherche dans le type d'instance de a une fonction qui a le (même) nom et paramètres (ou avec des paramètres de super classe)..dans ce cas la il n'ya rien autre que la fonction qui retourne 1 .
System.out.println (a.f(b)); // OK le même raisonnement que celui d'avant .
// partie 2
System.out.println (ab.f(a));// OK le type declaré de (ab) est personne ,je cherche dans la classe personne une méthode qui a le même nom ( nombre de paramètre) que celle que j'appel.. c'est donc f( personne p), je cherhce dans le type d'instance de ab, les fonction qui ont le même nom,le même nombre de paramètres et les pramètres, c'est donc la fonction qui retourne 2.
System.out.println (ab.f(ab); // OK le même raisonement, il donne 2
System.out.println (ab.f(b));// OK même raisonnement, il donne 2 .
// partie 3
// même raisonnement :
System.out.println (b.f(a));// il donne 2
System.out.println (b.f(ab));// donne 2
System.out.println (b.f(b)); // donne 3 b est déclaré Etudiant, ont cherche une méthode f prenant un Etudiant. Le type réel de l'appel est Etudiant, donc c'est bien 3 qui sera retourné. |
Partager