domingo, 13 de marzo de 2016

Compatibilidad de tipos en JAVA



Compatibilidad de tipos

En una relación de tipo herencia, un objeto de la superclase puede almacenar un objeto de cualquiera de sus subclases. Por ejemplo, un objeto de la clase Vehiculo puede almacenar un objeto de la clase Turismo, Deportivo o Furgoneta. Dicho de otro modo, cualquier referencia de la clase Vehiculo puede contener una instancia de la clase Vehiculo o bien una instancia de las subclases Turismo, Deportivo o Furgoneta.
Esto significa que la clase base o superclase es compatible con los tipos que derivan de ella, pero no al revés. Una referencia de la clase Turismo solo puede almacenar una instancia de Turismo, nunca una instancia de la superclase Vehiculo.


Conversión ascendente de tipos

Cuando un objeto se asigna a una referencia distinta de la clase a la que pertenece, se hace una conversión de tipos. Java permite asignar un objeto a una referencia de la clase base.
Por ejemplo, si un objeto de la clase Turismo se asigna a una referencia de la clase Vehiculo, se hace una conversión ascendente de tipos, denominada “upcasting”. La conversión ascendente de tipos siempre se puede realizar.

Vehiculo miVehiculo = new Turismo("4090 TUR",
"Skoda", "Fabia",
"Negro",
90.0,
2,
true);
System.out.println("Vehículo " +
miVehiculo.getAtributos());

En este ejemplo se crea un objeto de la clase base Vehiculo utilizando el constructor de la clase derivada Turismo.
Dado que la instancia es de tipo Turismo, al invocar al método getAtributos() muestra los atributos de un turismo. 

Vehículo Matrícula: 4090 TUR Modelo: Skoda Fabia Color:
Negro Tarifa: 90.0 Disponible: false Puertas: 2
Marcha automática: true

A la referencia miVehiculo también se le puede asignar la referencia de una instancia existente de la clase Turismo. 

Turismo miTurismo = new Turismo("4100 TUR",
"VW", "Polo",
"Rojo",
80.0,
2,
false);
Vehiculo miVehiculo = miTurismo;
System.out.println("Vehículo " +
miVehiculo.getAtributos());

De nuevo, el método getAtributos() muestra los atributos de un turismo:

Vehículo Matrícula: 4100 TUR Modelo: VW Polo Color:
Rojo Tarifa: 80.0 Disponible: false Puertas: 2 Marcha
automática: false


Conversión descendente de tipos

Si una instancia de la clase base Vehiculo almacena una referencia a un objeto de una de sus clases derivadas, entonces es posible hacer una conversión descendente de tipos, denominada “downcasting”.
El objeto miVehiculo de la clase base Vehiculo almacena una referencia a un objeto de la clase derivada Turismo. En este caso, está permitido hacer una conversión descendente de tipos. La conversión se debe hacer de forma explícita, indicando el nombre de la clase a la que se desea convertir. 

Conversión descendente de tipos:

Vehiculo miVehiculo = new Turismo("4090 TUR",
"Skoda", "Fabia",
"Negro",
90.0,
2,
true);
Turismo miNuevoTurismo = (Turismo) miVehiculo;

En este ejemplo, el objeto de la clase Vehiculo almacena un objeto de la clase derivada Turismo. El objeto miVehiculo se convierte de forma explícita a un objeto de tipo Turismo utilizando el “casting” (Turismo). 
Solo así es posible realizar la asignación a una referencia que ha sido declarada de tipo Turismo.
Si no se utiliza el “casting”, entonces el compilador de Java da un mensaje de error que indica que se produce un conflicto de tipos y no puede convertir automáticamente una referencia Vehiculo en una referencia Turismo.
Es importante señalar que el “downcasting” no siempre es legal y puede producir un error durante la ejecución del programa Java.


Jerarquía de herencia

Cualquier clase Java puede ser utilizada como una clase base para extender sus atributos y comportamiento. La clase derivada que se obtenga, puede a su vez, ser extendida de nuevo. La relación de herencia es transitiva y define una jerarquía.
En Java todas las clases están relacionadas en una única jerarquía de herencia puesto que toda clase hereda explícitamente de otra o bien implícitamente de Object.
La clase Vehiculo no extiende explícitamente otra clase, por lo que se puede decir que es una extensión de la clase Object de Java. Esto quiere decir que cualquier objeto de un programa Java se puede ver como una instancia de la clase Object.
El esquema muestra la jerarquía de herencia de las clases asociadas a los tipos primitivos de Java.



Espero haber ayudado en algo. Hasta la próxima oportunidad!

DESCARGAR PUBLICACIÓN










  

No hay comentarios:

Publicar un comentario en la entrada