Enjoy A New Student Discount All 55,000 Courses on sale for Only $12.99

Ends in 05h 23m 49s

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

24 comentarios

  1. Hola como están, solo para comentar que el ultimo metodo avanza, esta incompleto y no se ve que es lo que va hacer, si lo pueden completar seria de gran ayuda, de antemano gracias .
    !! un saludo !!

  2. Hola como están, solo para comentar que el ultimo metodo avanza, esta incompleto y no se ve que es lo que va hacer, si lo pueden completar seria de gran ayuda, de antemano gracias .
    !! un saludo !!

  3. Hola muy buen ejercicio, acabo de aprender de el. Pero porque recomiendas hacer un cast al final?, me perdí en esa parte, podrias explicarme por favor

    1. Tenemos un objeto, pero si quieres utilizarlo como tal, le debes hacer un cast a la clase que pertenece, para poder utilizar todos sus métodos…..

Deja un comentario

/*Si te ha gustado el artículo
no dudes en compartirlo*/

Facebook
Twitter
LinkedIn

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies

Ver mi IP

Ver ip de mi máquina
tipo valor
Ip: 54.224.124.217
Proxy: 54.224.124.217
Remote host: ec2-54-224-124-217.compute-1.amazonaws.com
Remote port: 30946
** 54.224.124.217