[JAVA] Surcharge et redéfinition

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. désolé j'ai pensé que tu demandai des réponses pour un dm
    1
    1. ccm ne fait pas les devoirs des autres
      0
      1. Avant de dire n'importe quoi, tu devrais prendre le temps de lire ma question -_-"
        0
        1. 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