Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: samyri en 16 Agosto 2014, 02:51 am



Título: [Java] Ayuda con herencia
Publicado por: samyri en 16 Agosto 2014, 02:51 am
Hola:
Tengo un metodo abstracto implementado por dos clases hijas. Me gustaria que el return de una sea en int y el de la otra sea en String, pero como el tipo del return se define al momento de crear el metodo abstracto se me hace imposible.

Mi pregunta es si existe alguna forma de hacerlo o si es imposible.

Desde ya muchas gracias, agradezco mucho cualquier ayuda.


Título: Re: [Java] Ayuda con herencia
Publicado por: Xandrete en 16 Agosto 2014, 14:40 pm
Hola.

Si tienen los mismos parámetros, no es posible. El tipo del valor de retorno de la función virtual tiene que estar fijado y no puedes modificarlo al heredar. Tampoco puedes crear dos funciones con igual nombre y conjunto de parámetros, y diferenciarlas exclusivamente por el tipo de retorno. La cabecera de las funciones la constituyen el nombre y los parámetros, así que no es posible distinguirlas por el tipo de retorno.

Plantéate si realmente te hace falta hacer eso. Si los tipos son diferentes, ¿no crees que son tan diferentes que tendría más sentido definirla exclusivamente para las clases hijas, sin hacerla constar como método virtual de la superclase? Si la respuesta es que no, quizás quieras plantearte hacer que el tipo de retorno del método virtual sea Object, y en una clase hija devolver un Integer y en la otra devolver un String, aprovechando que en Java todas las clases heredan de Object.

Saludos


Título: Re: [Java] Ayuda con herencia
Publicado por: samyri en 19 Agosto 2014, 16:37 pm
Muchas gracias Xandrete por sacarme de esa gran duda, ahora no perderé mas tiempo buscando como hacer el método.

En cuanto a tu solución, no me sirve crear el método del tipo object, pero utilizando instance of, podría hacer la conversión correspondiente al obtener los datos. Por otro lado, si hago esto,  podría resultar mejor eliminar la herencia, tal como me comentabas.

Gracias por tu ayuda.