Exemple d'Exécution du polymorphisme en Java?
Comment est polymorphisme d'Exécution différent de polymorphisme Statique ?
Cela peut-il être un exemple de polymorphisme d'Exécution ?
public class X
{
public void methodA() //Base class method
{
System.out.println ("hello, I'm methodA of class X");
}
}
public class Y extends X
{
public void methodA() //Derived Class method
{
System.out.println ("hello, I'm methodA of class Y");
}
}
public class Z
{
public static void main (String args []) {
X obj1 = new X(); //Reference and object X
X obj2 = new Y(); //X reference but Y object
obj1.methodA();
obj2.methodA();
}
}
Le code a été choisi à partir d' ici
Oui c'est un exemple de Polymorphisme d'Exécution...et la Différence est ici
Vous pouvez voir un exemple Java dans le réponse suivante.
Y obj1 = new X(); Ceci est incorrect, vous ne peut pas lancer un parent à l'enfant en cas d'Exécution polymophism.
Vous pouvez voir un exemple Java dans le réponse suivante.
Y obj1 = new X(); Ceci est incorrect, vous ne peut pas lancer un parent à l'enfant en cas d'Exécution polymophism.
OriginalL'auteur Namit Sinha | 2015-03-10
Vous devez vous connecter pour publier un commentaire.
Oui c'est
Runtime polymorphism
en JavaDans
static polymorphism
, le compilateur détermine lui-même la méthode à appeler.Method overloading
est un exemple de polymorphisme statique.Dans
runtime polymorphism
, le compilateur ne peut pas déterminer la méthode au moment de la compilation.Method overriding
(comme ton exemple) est un exemple deruntime polymorphism
.Parce que dans
Runtime polymorphism
(comme ton exemple), la signature demethodA()
est similaire dans les deux la classeX(base class)
etY(child class)
. Donc le compilateur ne peut pas déterminer la méthode au moment de la compilation qui doit s'exécuter.Seulement après la création de l'objet(qui est un moment de l'exécution du processus), l'environnement d'exécution comprendre la nature exacte de la méthode à appeler.
C'est parce que dans ce cas,
obj1.methodA()
appelsmethodA()
dansClass X
depuisobj1
est variable de référence d'objet créé pourclass X
ET
obj2.methodA()
appelsmethodA()
dansClass Y
depuisobj2
est variable de référence d'objet créé pourclass Y
OriginalL'auteur NCA
Pour votre meilleure compréhension, j'ai essayé de modulation de votre code. Note de l'appel de constructeur pour les deux classes.
de sortie :-
Attentivement, regarder où des objets ont été créés. Il semble référence de X est en train d'être créé à l'aide de y. Méthode pour X devrait être appelée mais l'appel du constructeur de Y pour X de référence de la création dit indirectement que la mémoire a été allouée pour Y de l'Objet avant de le X de référence est créée. Jetez un oeil à les consoles de clarification.
OriginalL'auteur codechefvaibhavkashyap
Son polymorphisme d'exécution que le compilateur ne sait pas jusqu'à le moment de l'exécution sur l'objet sur lequel la méthode à appeler.
toutefois la ligne suivante va vous donner cast exception:
Y obj1 = new X(); //Incorrect façon
X obj1 = new A(); //Correct manière
Maintenant obj1.methodA() appelle la methodA() de la Classe Y depuis obj1 est variable de référence d'objet créé pour la classe Y
OriginalL'auteur nitz
Oui, votre exemple est un exemple de polymorphisme d'exécution. Un exemple de polymorphisme statique serait la surcharge de méthode. Voici quelques bons exemples:
Quelle est la différence entre statique et dynamique polymorphisme en Java?
Acclamations,
Marcus
OriginalL'auteur Marcus Widegren
J'ai changé la méthode main un peu comme ci-dessous:
Maintenant, en regardant le code, vous ne pouvez jamais dire la méthode qui sera appelée. Parce que cela dépend de la valeur de l'utilisateur en cours d'exécution. Ainsi, c'est décidé lors de l'exécution de la méthode qui sera appelée. Par conséquent, le polymorphisme d'Exécution.
OriginalL'auteur user2048204