Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Herencia objetos

Estas en el tema de Herencia objetos en el foro de Java en Foros del Web. Adult y Child son objetos que tienen el "extends Person" (Heredan de Person) Código: if (person instanceof Adult || person instanceof Child) { Aquí llamar ...
  #1 (permalink)  
Antiguo 07/06/2013, 06:46
 
Fecha de Ingreso: mayo-2013
Mensajes: 68
Antigüedad: 11 años
Puntos: 0
Herencia objetos

Adult y Child son objetos que tienen el "extends Person" (Heredan de Person)

Código:
 if(person instanceof Adult || person instanceof Child)
{
     Aquí llamar a un método que hay en común entre Adult y Child
}
En otras palabras, ¿Como puedo llamar a un método de un objeto hijo?
  #2 (permalink)  
Antiguo 07/06/2013, 07:37
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Herencia objetos

Depende, ¿es un método heredado de Person?

Si es así no tienes que hacer nada, sólo llamarlo, si es un método que has añadido a Child y Adult sin que sea heredado de Person (con o override o sin él), lo único que puedes hacer es castear el objeto a la clase que le corresponde.

Person p = new Adult();

Adult d = (Adult)p;

d.metodoNoHeredado()

Lee un poco sobre herencias.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 07/06/2013, 22:37
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: Herencia objetos

Cita:
if(person instanceof Adult || person instanceof Child)
Esto no se hace , no debes preguntarle a un objeto de que tipo es , porque rompe con el polimorfismo supongamos que en vez de tener un jerarquia de dos objetos sea de n, tendrias que tener n condicionales uno por cada subtipo de la clase madre.
En cuanto a tu pregunta se puede hacer como dice xerelo o si de antemano sabes que solo usas los metodos de la clase hija declarar el objeto como tal, igualmente depende del caso hay un tanto que el casteo no es muy legible y se elige por no hacerlo otros que si ,depende del caso.


Saludos
  #4 (permalink)  
Antiguo 08/06/2013, 01:44
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Herencia objetos

Cita:
Esto no se hace , no debes preguntarle a un objeto de que tipo es , porque rompe con el polimorfismo supongamos que en vez de tener un jerarquia de dos objetos sea de n, tendrias que tener n condicionales uno por cada subtipo de la clase madre.
Claro que puedes preguntarle al objeto de qué tipo es, de hecho para hacer downcast es casi obligatorio. Y lo de que rompe el poliformismo no tiene sentido, es parte del polimorfismo ¿por qué crees que existe instanceof?

Tal y cómo lo ha puesto NeoAres no, porque esa condición equivale a (instanceof Person), pero un if(p instanceof Child)/elseif(p instanceof Parent)/else para pasar los elementos Person de un List a su clase correspondiente sería algo muy común.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #5 (permalink)  
Antiguo 08/06/2013, 12:21
 
Fecha de Ingreso: marzo-2012
Ubicación: Argentina
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 12
Respuesta: Herencia objetos

Hay muchas cosas que existen en los lenguajes y sin embargo no son buenas ,e.g. goto.

Si queres usarlo podes.Que este bueno es otra cosa para mi no lo es porque hace menos flexible el codigo el dia de mañana si quisieras cambiar chid o adult deberias ir a cada lugar donde preguntaste por su tipo.Eso no es polimorfico,a lo que te ayuda o casi obliga ,el polimorfismo,es a eilminar condicionales y lo que me mostras es un if anidado.Luego de que pase el tiempo quzas la jerarquia de Person crezca, el codigo va quedar muy feo casi ilegible.
Son pautas que uno tiene en cuanta al momento del diseño en OOP.Una manera de adelantarse al crecimiento de la entropia.

Es lo que pienso.

Saludos.

Última edición por darkChild; 08/06/2013 a las 12:28

Etiquetas: herencia, objetos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:54.