Posts Tagged ‘clase abstracta

28
Abr
13

Propiedades de la P.O.O. (Clases abstractas)

Las clases abstractas en cierta forma son muy parecidas a las interfaces y son muy parecidas a las clases normales.  Una clase abstracta puede tener o no métodos abstractos, no pueden ser instanciadas y son utilizadas como «plantilla» para otras clases ya que si pueden ser heredadas.

Son parecidas a las interfaces ya que podemos declarar métodos abstractos y de estos no especificar la implementación, lo que obliga a las sub-clases (no abstractas) a describir la implementación de dicho método(abstract void metodo();), todos los métodos de una interfaz son abstractos sin necesidad de decirlo de manera explicita.

Tanto las interfaces como las clases abstractas permiten implementar la figura de polimorfismo dentro del código, la diferencia mas notable que hay es que en las interfaces no se puede describir la implementación de un método y la declaración de sus variables deben ser final y estáticas, dejando así una «plantilla» en blanco para ser implementada totalmente por la clase que use dicha interfaz; y por otro lugar en las clases abstractas se comparte una porción de la implementación de los métodos; proveyendo parte de la funcionalidad y dejando la otra parte para ser implementada por la sub-clase. O sea una clase abstracta con todos los métodos abstractos debería ser declarada como interfaz, de igual manera una clase abstracta que no declare ningún método abstracto debe ser declarada como una clase normal.

package ingenio.ds.examples;

public class ClasesAbstractas {

   	public static void main(String argumentos[]){
		//*Creamos instancias de las sub-clases Bicicleta, Avion, Submarino*/
		VehiculoAereo v1=new VehiculoAereo();
		VehiculoTerrestre v2=new VehiculoTerrestre();
		VehiculoAcuatico v3=new VehiculoAcuatico();

		//*seteamos valores para el VehiculoAereo*/
		v1.nombre="Avión";
		v1.velocidadActual=0.0001;
		v1.velocidadMaxima=850.0;
		v1.cantidadTripulacion=2;
		v1.alturaMaxima=10400.0;

		//*seteamos valores para la VehiculoTerrestre*/
		v2.nombre="Automovil";
		v2.tipoTerreno="Desertico";
		v2.velocidadActual=1.0;
		v2.velocidadMaxima=60.0;
		v2.cantidadTripulacion=1;

		//*seteamos valores para el VehiculoAcuatico*/
		v3.nombre="Lancha";
		v3.velocidadActual=0.0001;
		v3.velocidadMaxima=460.0;
		v3.cantidadTripulacion=8;

		//*Creamos un arreglo de la super clase y agregamos
		//las instancias de las sub clases*/
		Vehiculo[] vehiculos= new Vehiculo[]{v1,v2,v3};
		mostrar(vehiculos);
	}

	public static void mostrar(Vehiculo instancias[]){
		for(Vehiculo instancia:instancias){
			instancia.mostrar();
			System.out.println("");
		}
	}
}

abstract class Vehiculo{
	String nombre;
	String tipoVehiculo;
	String fuenteEnergia="Motor";
	Double velocidadMaxima;
	Double velocidadActual;
	Double relacionAceleracion;
	int cantidadTripulacion;

	public void mostrar(){
		System.out.println(" Información del vehículo");
		System.out.println(" Nombre ...........: "+nombre);
		System.out.println(" Tipo   ...........: "+tipoVehiculo);
		System.out.println(" Fuente de energía : "+fuenteEnergia);
		System.out.println(" Tripulación ......: "+cantidadTripulacion);
		System.out.println(" Velocidad máxima .: "+velocidadMaxima);
		System.out.println(" Velocidad actual .: "+velocidadActual);
	}
}

class VehiculoTerrestre extends Vehiculo{
	String tipoTerreno;

	public VehiculoTerrestre(){
		tipoVehiculo="Terrestre";
	}

	public void mostrar(){
		super.mostrar();
		System.out.println(" Tipo de terreno ..: "+tipoTerreno);
	}
}

class VehiculoAcuatico extends Vehiculo{
	String tipoNavegacion;

	public VehiculoAcuatico(){
		tipoVehiculo="Acuatico";
	}
}

class VehiculoAereo extends Vehiculo{
	Double alturaMaxima;
	String tipoCarga;

	public VehiculoAereo(){
		tipoVehiculo="Aereo";
	}
}



I+Ds

Dudas consultas
Facebook
Twiter
Google +

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevas publicaciones por correo.

Únete a otros 354 suscriptores

Redes Sociales y Archivos

Entradas

May 2024
L M X J V S D
 12345
6789101112
13141516171819
20212223242526
2728293031