[JAVA] Surcharge et redéfinition
moi.néo
Messages postés
1135
Statut
Membre
-
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.
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.
A voir également:
- [JAVA] Surcharge et redéfinition
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Eclipse java - Télécharger - Langages
5 réponses
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" !
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" !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question