Ejercicios de java. Interfaces

En el siguiente ejercicio, vemos como el diseño de una interface y su posterior implementacion, nos facilita los tratamientos de objetos, sin necesidad de preocuparnos por sus detalles, cuando debemos acceder a las caracteristicas comunes.

Para ello, creamos un nuevo paquete, llamado “autos”, y escribimos la interface que deberán implementar nuestras clases:

package autos;

public interface Vehiculo {
    int VELOCIDAD_MAXIMA=120;

    String frenar(int cuanto);
    String acelerar(int cuanto);
}

Ahora pasamos a escribir dos clases, la clase coche

package autos;

public class Coche implements Vehiculo {
    int velocidad=0;
    @Override
    public String frenar(int cuanto) {
        // TODO Auto-generated method stub;
        velocidad-=cuanto;
        return "El coche ha frenado ya y va a "+velocidad+"km/hora";
    }

    @Override
    public String acelerar(int cuanto) {
        // TODO Auto-generated method stub
        String cadena="";
        velocidad+=cuanto;
        if (velocidad>VELOCIDAD_MAXIMA)
            cadena="Exceso de velocidad";
        cadena+="El coche ha acelerado y va a "+velocidad+"km/hora";
        return cadena;
    }
    public int plazas(){
        return 4;
    }

y la clase moto

package autos;

public class Moto implements Vehiculo {
    int velocidad;
    @Override
    public String frenar(int cuanto) {
        // TODO Auto-generated method stub
        velocidad-=cuanto;
        return "La moto ha frenado ya y va a "+velocidad+"km/hora";
    }

    @Override
    public String acelerar(int cuanto) {
        // TODO Auto-generated method stub
        String cadena="";
        velocidad+=cuanto;
        if (velocidad>VELOCIDAD_MAXIMA)
            cadena="Exceso de velocidad";
        cadena+="La moto ha acelerado y va a "+velocidad+"km/hora";
        return cadena;
    }
    public int plazas(){
        return 2;
    }
}

Ahora, creamos una clase accesible desde linea de comando, para probar estas dos clases y la llamamos UsoVehiculo

package autos;

public class UsoVehiculo {

    /**
     * @param args
     */
    static Vehiculo[] moviles;
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        genera();
/*      Vehiculo v1=new Moto();
        Coche v2 = new Coche();
        System.out.println(acelerar(100,v1));
        System.out.println(v1.frenar(25));
        System.out.println(acelerar(130,v2));
        System.out.println(v2.frenar(25));*/

    }
    static void destruyeVehiculo(Vehiculo val){
        System.out.println("Envio a desguace "+ val.toString());

    }
    static String acelerar(int cantidad,Vehiculo vei){
        return vei.acelerar(cantidad);
    }
    public  static void genera(){
        moviles=new Vehiculo[6];
        moviles[0]=new Moto();
        moviles[1]=new Coche();
        moviles[2]=new Moto();
        moviles[3]=new Moto();
        moviles[4]=new Coche();
        moviles[5]=new Moto();
        for (int a=1;a<10;a++){
            avanza();
        }

    }
    public static void avanza(){
        System.out.println("Avanzando");
        for (int a=0;a

Si observais, hemos creado un array, del tipo Vehiculo, en donde nos aparecen mezclados coches y motos; sin el uso de la Interface, no hubiera sido posible, de una forma sencilla, la definicion de un array que contuviera los dos tipos (distintos) de objetos. A traves de este array, podemos acceder a los metodos especificados en la interface; naturalmente, si la clase ha añadido algun metodo por su cuenta no lo podremos ver, pero esta capacidad de meternos en un bucle para revisar nuestros objetos ya es bastante util.
Si necesitaramos acceder a otros metodos o propiedades especiales de una clase, podemos averiguar cual es la clase a la que pertenece realmente ese objeto, utilizando un método de object (getClass()), podeis probar de añadir en el ultimo bucle

                System.out.println(moviles[a].getClass());

si sabes la clase, puedes hacer un cast y listo

Acerca de Miguel Garcia

Programador, Desarrollador web, Formador en distintas areas de informatica y director de equipos multidisciplinares.
Esta entrada fue publicada en Formacion, Java y etiquetada , , . Guarda el enlace permanente.

2 respuestas a Ejercicios de java. Interfaces

  1. Pingback: Ejercicios de java. Interfaces | Bitácora del Capitán

  2. Pingback: Java - Un resumen organizado....o no.Recursos para formacion

Deja un comentario