[JAVA] Surcharge et redéfinition

moi.néo Messages postés 1135 Statut Membre -  
moi.néo Messages postés 1135 Statut Membre -
Salut.

J'ai un petit souci de compréhension avec la surcharge et la redéfinition en Java, avec les types réels et déclarés.

Soit le code suivant:

C c = new C() ;
A a = c;
B b = c;
Z z = new Z();
X x = z;
Y y = z;

Pourquoi les appels suivants provoquent l'affichage de "B::Y" ? :
b.f(z);
b.f(y);
a.f(z);
a.f(y);

class X{} ;
class Y extends X {...} ;
class Z extends Y{....}

public class A {
public void f(Y y) {System.out.println(“ A::Y”);}
}

public class B extends A {
public void f(Y y) {System.out.println(“ B::Y”);}
}

public class C extends B {
public void f(X x) {System.out.println(“ C::X”);}
public void f(Z z) {System.out.println(“ C::Z”);}
}


Merci d'avance.

5 réponses

  1. garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   408
     
    désolé j'ai pensé que tu demandai des réponses pour un dm
    1
  2. garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   408
     
    ccm ne fait pas les devoirs des autres
    0
  3. moi.néo Messages postés 1135 Statut Membre 86
     
    Avant de dire n'importe quoi, tu devrais prendre le temps de lire ma question -_-"
    0
  4. moi.néo Messages postés 1135 Statut Membre 86
     
    Bon voilà comment j'aurais interprété b.f(z) :
    Je pars du type réel de b (qui est C) et je cherche un service qui a comme signature "f(Z)". Il y en a un donc l'affichage serait "C::Z".
    Mais quand je l'exécute, ça m'affiche "B::Y" !
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. moi.néo Messages postés 1135 Statut Membre 86
     
    up :(
    0