Java - Problema con clases abstractas

 
Vista:

Problema con clases abstractas

Publicado por gothmog (25 intervenciones) el 18/01/2003 18:56:38
Buenas, tengo un problemilla de polimorfismo. Yo tengo una clase padre (abstracta) de la cual heredan dos clases hijas.

Luego en la aplicacion declaro un array de objetos de la clase padre q puede albergar objetos de cualquiera de las dos clases hijas.

El problema es que no puedo utilizar los metodos exclusivos de las clases hijas, pues me dice que no son objetos de la clase padre, es decir, me da error de compilacion, pero en ejecucion no deberia dar error pq voy a usar las clases hijas.

Me han hablado por ahi de algo llamado downcasting, pero no tengo ni idea de como arreglar esto.

Agradeceria que me contestaran lo mas pronto posible, antes del lunes.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con clases abstractas

Publicado por chuidiang (532 intervenciones) el 20/01/2003 10:48:08
Con una variable de tipo padre, no puedes usar métodos de las clases hijas.
La solución es hacer un cast, como te han dicho. Por ejemplo
class padre {...}
class hija extends padre {...}

padre unaInstancia = new hija();

donde quieras usar metodos de la clase hija, tienes que hacer

if (unaInstancia instanceof hija)
( (hija)unaInstancia ).metodo_hija();

Esto te arregla el problema, pero depende de dónde lo pongas, es poco elegante. Si tu array de clases padre está un una clase A, no deberías hacer este cast dentro de ningún método de la clase A. Si lo haces, la clase A deberá conocer todos las posibles clases hijas. Si algún día inventas una nueva clase hija, tendrías que retocar A.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con clases abstractas

Publicado por Oscar (661 intervenciones) el 20/01/2003 19:17:30
Una forma mas elegante de hacer eso es con el uso de interfaces. Asi, puedes tener lo siguiente
interface A {
metodo();
}

class X1 implements A {
metodo() {
hasAlgo();
}
}
class X2 implements A {
metodo() {
holaMundo();
}
}

.......
......
De esta forma en puedes crear un arrego de interfaces A. Y cuando obtengas un elemento, y ejecutes 'metodo', se ejecuta la implementacion de la clase a la que pertenece ese elemento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con clases abstractas

Publicado por gothmog (25 intervenciones) el 21/01/2003 09:48:00
Gracias por las respuestas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar