viernes, 11 de marzo de 2016

Polimorfismo en java



Las clases Turismo, Deportivo y Furgoneta extienden a la clase Vehiculo. Estas clases heredan los atributos de Vehiculo y cada subclase añade atributos y métodos propios.

La clase Turismo añade los atributos puertas, marchaAutomatica y los métodos getPuertas() y getMarchaAutomatica().

La clase Deportivo añade el atributo cilindrada y el método getCilindrada().

La clase Furgoneta añade los atributos carga, volumen y los métodos getCarga() y getVolumen().

Además, cada subclase declara un método getAtributos(). Este método también se ha declarado en la superclase. Esto significa que el método getAtributos() de las subclases sobreescribe al método de la superclase. 
Dependiendo del tipo de objeto que invoque el método, se ejecuta el método correspondiente a la clase del objeto. Por ejemplo, si el método es invocado por un objeto de la clase Turismo, entonces se ejecuta el código del método getAtributos() de la clase Turismo. 

Los métodos getAtributos() de las subclases modifican el comportamiento del método getAtributos() de la superclase. En cada método se invoca a super.getAtributos() para que muestre los atributos de un vehículo y después se muestran los atributos propios de la subclase. Los métodos getAtributos() de las subclases sobrescriben el método getAtributos() de la superclase. Esta característica de los lenguajes de programación orientados a objetos se conoce como polimorfismo.

Un objeto de las subclases Turismo, Deportivo o Furgoneta puede invocar los métodos getMatricula(), getMarca(), getModelo(), getColor(), getTarifa(), getDisponible(), setTarifa() y setDisponible() de la superclase Vehiculo. 

El esquema muestra la superclase Vehiculo y las subclases Turismo, Deportivo y Furgoneta con sus atributos y métodos.



El siguiente ejemplo muestra el comportamiento de los métodos sobreescritos en las subclases.

// creación de instancias de la superclase Vehiculo y
// de las subclases Turismo, Deportivo y Furgoneta
Vehiculo miVehiculo = new Vehiculo("4050 ABJ",
"VW", "GTI",
"Blanco",
100.0);
Turismo miTurismo = new Turismo("4060 TUR",
"Skoda", "Fabia",
"Blanco",
90.0,
2,
false);
Deportivo miDeportivo = new Deportivo("4070 DEP",
"Ford”, "Mustang",
"Rojo",
150.0,
2000);
Furgoneta miFurgoneta = new Furgoneta("4080 FUR",
"Fiat", "Ducato",
"Azul",
80.0,
1200,
8);
// invocación del método getAtributos() de cada objeto
System.out.print("Vehículo : " +
miVehiculo.getAtributos());
// miVehiculo es una instancia de la clase Vehiculo, se
// invoca el método getAtributos() de Vehiculo
Vehículo : Matrícula: 4050 ABJ Modelo: VW GTI
Color: Blanco Tarifa: 100.0 Disponible: false
System.out.print("Turismo " + miTurismo.getAtributos());
// miTurismo es una instancia de la clase Turismo, se
// invoca el método getAtributos() de Turismo
Turismo Matrícula: 4060 TUR Modelo: Skoda Fabia
Color: Blanco Tarifa: 90.0 Disponible: false Puertas: 2
Marcha automática: false
System.out.print("Deportivo " +
miDeportivo.getAtributos());
// miDeportivo es una instancia de la clase Deportivo,
// se invoca el método getAtributos() de Deportivo
Deportivo Matrícula: 4070 DEP Modelo: Ford Mustang
Color: Rojo Tarifa: 150.0 Disponible: false
Cilindrada (cm3): 2000
System.out.print("Furgoneta " +
miFurgoneta.getAtributos());
// miFurgoneta es una instancia de la clase Furgoneta,
// se invoca el método getAtributos() de Furgoneta
Furgoneta Matrícula: 4080 FUR Modelo: Fiat Ducato
Color: Azul Tarifa: 80.0 Disponible: false
Carga (kg): 1200 Volumen (m3): 8
// el objeto miTurismo pertenece a la subclase Turismo,
// es un vehículo y puede invocar a los métodos de la
// superclase Vehiculo: getMatricula(),
// getMarca() y getModelo()
System.out.print("Turismo : " +
miTurismo.getMatricula() + " " +
miTurismo.getMarca() + " " +
miTurismo.getModelo());

Turismo : 4060 TUR Skoda Fabia


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











  

No hay comentarios:

Publicar un comentario en la entrada