J'ai écrit ci-dessous un exemple de polymorphisme.Pourquoi une nouvelle méthode dans la sous-classe n'est pas accessible en utilisant la variable de référence de la superclasse
package tsys;
public class DynamicPolymorphism {
public void eat(){
System.out.println("DynamicPolymorphism");
}
}
class AnotherClass extends DynamicPolymorphism{
public void eat(){
System.out.println("Another Class");
}
public void consume(){
System.out.println("consume");
}
}
class TestPolymorphism{
public static void main(String args[]){
DynamicPolymorphism dp = new AnotherClass();
dp.eat();//Works fine
dp.consume();//compile time error
}
}
Maintenant question est pourquoi le compilateur se plaint de dp.consume()
? Cette question m'a été posée dans une interview J'ai expliqué la raison que "Au moment de la compilation le compilateur ne sait que sur Type de référence comme type de dp
est DynamicPolymorphism
donc le compilateur est incapable de trouver la méthode consume
." Interviewer contrer ma réponse et demandé ce qui se passe dans les coulisses que le compilateur donne l'erreur mais nous référons à la variable dp
à une instance de AnotherClass
. Qu'est-ce que je peux d'autre expliquer à l'intervieweur par rapport à la question du contre-interrogatoire?
Downvoters, pouvez-vous expliquer ce qui ne va pas avec question afin que je puisse améliorer? –
J'aurais demandé des précisions, car je ne comprends pas la contre-question. Il n'y a pas de "coulisses". Le compilateur sait que 'dp' est un' DynamicPolymorphism', donc il n'autorise que les appels connus, c'est-à-dire les appels aux méthodes déclarées par 'DynamicPolymorphism'. Fondamentalement ce que vous avez dit. C'est la nature fondamentale d'un langage [statiquement-typé] (https://stackoverflow.com/q/1517582/5221149) comme Java. – Andreas
@Andreas Votre réponse est apt, je suis juste à la recherche ici, Y at-il quelque chose que j'ai manqué en ce qui concerne le polymorphisme. Merci –