Hola que tal amigos, como les va a todos, espero que bien..
Aki molestandolos traiendoles una dudilla..
Este es el caso, estoy ocupando la herencia.. y ai les va.. xD
Tengo 3 clases.. primero esta la madre, y luego las otras dos que desciendn del padre..
El padre tiene digamos 5 atributos.. ok, y las hijas cada una tiene diferentes atributos a la del padre... (si me siguen??) algo asi..
Padre: 5 atributos..
Hija1: 2 atributos..
Hija2: 1 atributo..
Y luego tenemos las 3 clases..
public class Padre{
}
public class Hija1 extends Padre{
}
public class Hija2 extends Padre{
}
Y por ultimo genere una ultima clase para que me manejara todos.. ok?
Algo asi:
public class ManejaTodas{
private Padre[] NombreCualquiera = null;
---------------------------------------------------
Ahora viene el problema...
si quiero usar algun atributo del padre lo puedo usar como si nada en la clase ManejaTodas..
Pero para usar algun atributo de las Hijas.. me marca que no lo he especificado en el arreglo ManejaTodas..
Y me dicen que para usar lo de las hijas tengo que usar el "Cast", se que significa el cast, pero.... como lo uso, donde lo pongo.. ???
Gracias, y espero que me hayan entendido, cualquiera cosa em preguntan.. =)
Hola...
Sí, efectivamente tu error es comprensible puesto que una de las características principales de la herencia es que los hijos se comportan de la misma manera que los padres pero no viceversa.
Es por eso que si tienes Instancias "Padre" en la clase ManejaTodas, efectivamente puedes ver todos los atributos y métodos públicos de la clase "Padre", sin embargo no puedes pretender que se vean los atributos de los hijos ya que MUCHAS CLASES PUEDEN HEREDAR DE LA CLASE PADRE y cada una de esas clases pueden tener sus atributos propios. Y por tal razón, JAVA no sabría a cual de todas las clases que heredan de padre es a la que quieres referir tu código.
Es por todo lo anterior que existe algo llamado CAST, que lo que hace mas o menos en general es convertir a groso modo la clase Padre en alguna otra clase Hija.
Por ejemplo:
Si tienes una clase Padre y tienes una clase Hija entonces los siguientes fragmentos de código serían correctos:
Código:
// Aquí otroPadre es una instancia de Hija pero perfectamente puede ser instanciada
// desde la clase Padre.
Padre otroPadre = new Hija();
// Aquí laHija es una instancia de la clase Hija y se le está realizando un CAST
// para convertir la instancia otroPadre en una instancia de la clase Hija.
Hija laHija = (Hija) otroPadre;
Tengo que resaltar que solamente puedes realizar el CAST cuando realmente la instancia que creaste en primera medida pertenecía a dicha clase. (En el caso del ejemplo, la instancia otroPadre fue creada como <new Hija()>, y por tal motivo le pude realizar el CAST).
Si haces un mal CAST te saldrá un error en rojo llamado Excepción que posiblemente pueda ser una IllegalClassCastException.... o algo así... no me acuerdo muy bien.
Te recomiendo por el momento que investigues ciertos conceptos tales como:
- Clase Abstract
- Visibilidad de atributos y métodos (private, public, protected y omitido).
- Manejo de paquetes
Suerte!