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 varias implementaciones distintas o admitir 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, salvo 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;
}
}
Todas las operaciones definidas por la interfaz deben ser implementadas por la clase que la implementa.
Por lo general, las interfaces contienen métodos de instancia.
Un ejemplo de una interfaz que se encuentra en la Java Class Library, además de Cloneable, que se ilustró arriba, 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 trabajar un poco más con autos de control remoto.
Se ha desarrollado un auto experimental y hay que adaptar la pista de pruebas para que pueda manejar tanto los modelos de producción como los experimentales. Los dos tipos de auto ya están construidos y necesitas encontrar la manera de lidiar con ambos en la pista de pruebas.
Además, los autos 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 autos de producción.
Agrega dos métodos a la interfaz RemoteControlCar:
drive(), que no devuelve nada, ygetDistanceTravelled(), que devuelve un int.Luego 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 auto 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 auto 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 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 autos debe ser el orden descendente de victorias.
Implementa el método estático TestTrack.getRankedCars() para que devuelva los autos 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.