J'essaye dans cette question de résoudre ce problème. Lors du référencement d'une classe enfant à l'aide d'une référence de classe parent, nous appelons les méthodes de la classe parent.
class Programmer { void print() { System.out.println("Programmer - Mala Gupta"); } } class Author extends Programmer { void print() { System.out.println("Author - Mala Gupta"); } } class TestEJava { Programmer a = new Programmer(); Programmer b = new Author(); b.print(); }
Suite à ce code, j'obtiens la sortie comme ceci 'Auteur - Mala Gupta'; malgré cela, je devrais faire exécuter la méthode du parent. Pouvez-vous m'expliquer ce qui se passe dans les coulisses.
4 Réponses :
Vous ne devriez pas obtenir la sortie 'Programmer - Mala Gupta', car vous créez l'objet Author
:
new Author();
Programmer
dans ce cas, il s'agit simplement d'une référence à l'objet. Et cette référence peut pointer vers n'importe quel objet de Programmer
et ses sous-classes.
Mais, lorsque vous invoquez une méthode, vous l'appelez sur l'objet pointé par la référence. Et c'est Author
.
Programmer
est la classe parente et Author
est l'enfant de Programmer
. La classe parent contient la référence de l'objet de classe enfant, mais vous ne pouvez appeler que les méthodes qui sont dans la classe Parent.
Dans Programmer b
, il y a en fait une référence de la classe Author
. C'est pourquoi il a appelé la fonction de classe Author
. il s'appelle Polymorphisme
.
Lorsqu'une méthode remplacée est appelée via une référence de superclasse, Java détermine la version de cette méthode à exécuter en fonction du type de l'objet auquel il est fait référence au moment de l'appel. Ainsi, cette détermination est effectuée au moment de l'exécution.
C'est le type de l'objet auquel il est fait référence (et non le type de la variable de référence) qui détermine la version d'une méthode remplacée qui sera exécutée.
Par conséquent, si une superclasse contient une méthode qui est remplacée par une sous-classe, alors lorsque différents types d'objets sont référencés via une variable de référence de superclasse, différentes versions de la méthode sont exécutées. C'est pourquoi vous obtenez la sortie: Auteur - Mala Gupta
Ce concept est lié au Polymorphisme d'exécution . Ici, la variable de référence "b" appartient à la classe parent (Programmer) et l'objet appartient à la classe enfant (Author).
Désormais, la variable de référence "b" pointe vers la classe enfant (Author).
Il existe deux définitions pour la méthode print (), l'une appartient au programmeur et l'autre appartient à la classe Author. La détermination de la méthode à appeler est basée sur l'objet référencé par la variable de référence. Le processus dans lequel l'appel à une fonction sera résolu au moment de l'exécution.
Ainsi, chaque fois que vous appelez b.print (), vous obtiendrez la sortie sous la forme:
En relation: stackoverflow.com/questions/154577/… a>