OVH Cloud OVH Cloud

Héritage

5 réponses
Avatar
frs_simon
Bonjour,

J'ai deux classes C1 et C2

C1 définit la méthode suivante :

public String test(){
return "test";
}

C2 hérite de C1 et définit la méthode suivante :

public int test(){
return 1;
}

A la compilation j'ai l'erreur suivante :
Error : The return type is incompatible with C1.test() C2.java

Est il impossible de surcharger une méthode en changeant son type de
retour ? Pourquoi ?

Merci pour votre aide

5 réponses

Avatar
Phildes
Est il impossible de surcharger une méthode en
changeant son type de retour ?
Non



Pourquoi ?
Que ferais le compilateur si ?

a - C1 objC = ...; //
objC est déclaré C1, mais le compilateur
ignore si "objC" est un objet C1ou C2
b - var01 = objC.test( );
Est-ce que var1 recevra un "entier" ou un "String" ?




"J.L." a écrit dans le message de
news:
Bonjour,

J'ai deux classes C1 et C2

C1 définit la méthode suivante :

public String test(){
return "test";
}

C2 hérite de C1 et définit la méthode suivante :

public int test(){
return 1;
}

A la compilation j'ai l'erreur suivante :
Error : The return type is incompatible with C1.test() C2.java

Est il impossible de surcharger une méthode en changeant son type de
retour ? Pourquoi ?

Merci pour votre aide


Avatar
J.L.
Je suis d'accord avec ton exemple, mais je en comprends pas ta première
réponse.

Est il impossible de surcharger une méthode en
changeant son type de retour ?


Non


Ne voulais tu pas dire "oui, c'est impossible" ?

Phildes wrote:
Est il impossible de surcharger une méthode en
changeant son type de retour ?


Non



Pourquoi ?


Que ferais le compilateur si ?
a - C1 objC = ...; //
objC est déclaré C1, mais le compilateur
ignore si "objC" est un objet C1ou C2
b - var01 = objC.test( );
Est-ce que var1 recevra un "entier" ou un "String" ?




"J.L." a écrit dans le message de
news:

Bonjour,

J'ai deux classes C1 et C2

C1 définit la méthode suivante :

public String test(){
return "test";
}

C2 hérite de C1 et définit la méthode suivante :

public int test(){
return 1;
}

A la compilation j'ai l'erreur suivante :
Error : The return type is incompatible with C1.test() C2.java

Est il impossible de surcharger une méthode en changeant son type de
retour ? Pourquoi ?

Merci pour votre aide







Avatar
Phildes
En effet, je me suis trompé je voulais évidemment dire : "Oui c'est
impossible"

Désolé


"J.L." a écrit dans le message de
news:buh2l7$rq1$
Je suis d'accord avec ton exemple, mais je en comprends pas ta première
réponse.

Est il impossible de surcharger une méthode en
changeant son type de retour ?


Non


Ne voulais tu pas dire "oui, c'est impossible" ?

Phildes wrote:
Est il impossible de surcharger une méthode en
changeant son type de retour ?


Non



Pourquoi ?


Que ferais le compilateur si ?
a - C1 objC = ...; //
objC est déclaré C1, mais le compilateur
ignore si "objC" est un objet C1ou C2
b - var01 = objC.test( );
Est-ce que var1 recevra un "entier" ou un "String" ?




"J.L." a écrit dans le message de
news:

Bonjour,

J'ai deux classes C1 et C2

C1 définit la méthode suivante :

public String test(){
return "test";
}

C2 hérite de C1 et définit la méthode suivante :

public int test(){
return 1;
}

A la compilation j'ai l'erreur suivante :
Error : The return type is incompatible with C1.test() C2.java

Est il impossible de surcharger une méthode en changeant son type de
retour ? Pourquoi ?

Merci pour votre aide










Avatar
Yaltar
Bonjour,
en fait c'est le principe même de l'héritage ... pour hériter il faut qu'il
y ai la même signature de la méthode, de plus dans ce cas précis, ce n'est
pas de l'héritage mais plus de la surcharge, même nom de méthode mais pas
même signature, hors pour la surcharge il faut que les paramètres d'appels
soient différents, ce qui n'est pas le cas non plus ici
Avatar
Nicolas Delsaux
Le 19.01 2004, J.L. s'est levé et s'est dit : "tiens, si j'écrivais aux
mecs de fr.comp.lang.java ?"

Bonjour,

A la compilation j'ai l'erreur suivante :
Error : The return type is incompatible with C1.test() C2.java

Est il impossible de surcharger une méthode en changeant son type de
retour ? Pourquoi ?


C'est impossible en Java car Java n'inclut pas dans la définition d'une
méthode le type de retour.
En effet, en Java, une méthode n'est définie que par son nom et sa liste
d'arguments d'entrée. Par conséquent, il est impossible de définir une
méthode homonyme disposant des mêmes paramètres, mais d'un type de retour
différent.

Merci pour votre aide



--
Nicolas Delsaux
JFS > Imaginer que des ingénieurs puissent reprendre le contrôle de quoi
que ce soit... Pas de doute, on est bien sur un forum de SF !
in fras en perte de contrôle