Una interfaz es un tipo que contiene miembros que definen un grupo de funcionalidad relacionada. Separa los usos de una clase de la implementación, lo que permite múltiples implementaciones diferentes o dar soporte a algún comportamiento genérico, como el formateo, la comparación o la conversión.
La sintaxis de una interfaz es similar a la de una clase, excepto que los métodos aparecen solo como la firma y no se proporciona un cuerpo.
public interface Language {
String getLanguageName();
String speak();
}
public class ItalianTraveller implements Language, Cloneable {
// from Language interface
public String getLanguageName() {
return "Italiano";
}
// from Language interface
public String speak() {
return "Ciao mondo";
}
// from Cloneable interface
public Object clone() {
ItalianTraveller it = new ItalianTraveller();
return it;
}
}
La clase que implementa la interfaz debe implementar todas las operaciones definidas por esta.
Las interfaces suelen contener métodos de instancia.
Un ejemplo de interfaz que se encuentra en la biblioteca de clases de Java, aparte de Cloneable, que se ha mostrado anteriormente, es Comparable<T>.
La interfaz Comparable<T> se puede implementar cuando se requiere un orden de clasificación genérico predeterminado en las colecciones.
En este ejercicio vas a seguir trabajando con coches teledirigidos.
Se ha desarrollado un coche experimental y la pista de pruebas debe adaptarse para poder manejar tanto los modelos de producción como los experimentales. Los dos tipos de coche ya están construidos y tienes que encontrar la forma de tratar con ambos en la pista de pruebas.
Además, los coches de producción están empezando a tener cierto éxito. El jefe del equipo quiere mantener el espíritu competitivo publicando una clasificación de los coches de producción.
Añade dos métodos a la interfaz RemoteControlCar:
drive(), que no devuelve nada, ygetDistanceTravelled(), que devuelve un int.Después, haz que ProductionRemoteControlCar y ExperimentalRemoteControlCar implementen la interfaz RemoteControlCar.
Esto incluye implementar todos los métodos que requiere la interfaz.
Cada llamada a .drive() debe hacer que el coche recorra una cierta distancia:
ProductionRemoteControlCar recorre 10 unidades,ExperimentalRemoteControlCar recorre 20 unidades.El método .getDistanceTravelled() debe devolver el número de unidades que el coche ha recorrido a lo largo de su vida.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Implementa el método TestTrack.race(RemoteControlCar car), en el que los car pueden llamar a drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Implementa la interfaz Comparable<T> en la clase ProductionRemoteControlCar.
El orden de clasificación predeterminado de los coches debe ser el orden descendente de victorias.
Implementa el método estático TestTrack.getRankedCars() para que devuelva los coches que se le pasan, ordenados de forma descendente por número de victorias.
ProductionRemoteControlCar prc1 = new ProductionRemoteControlCar();
ProductionRemoteControlCar prc2 = new ProductionRemoteControlCar();
prc1.setNumberOfVictories(2);
prc2.setNumberOfVictories(3);
List<ProductionRemoteControlCar> unsortedCars = new ArrayList<>();
unsortedCars.add(prc1);
unsortedCars.add(prc2);
List<ProductionRemoteControlCar> rankings = TestTrack.getRankedCars(unsortedCars);
// => rankings.get(0) == prc2
// => rankings.get(1) == prc1
Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.