Considérez ceci:Pourquoi cette méthode n'est-elle pas choisie en fonction du type d'exécution de son objet?
class A {
int x =5;
}
class B extends A{
int x =6;
}
public class CovariantTest {
public A getObject() {
return new A();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
CovariantTest c1 = new SubCovariantTest();
System.out.println(c1.getObject().x);
}
}
class SubCovariantTest extends CovariantTest {
public B getObject(){
return new B();
}
}
Pour autant que je sache, la machine virtuelle Java choisit une méthode basée sur le vrai type de son objet. Ici, le vrai type est SubCovariantTest, qui a défini une méthode de remplacement getObject.
Le programme imprime 5, au lieu de 6. Pourquoi?
Vous avez fait un travail beaucoup mieux l'expliquer que moi ... C'est en fait une sorte de délicate à mot ... – LorenVS