Uma interface é um tipo que contém membros que definem um grupo de funcionalidades relacionadas. Ela distancia os usos de uma classe da implementação, permitindo várias implementações diferentes ou o suporte a algum comportamento genérico, como formatação, comparação ou conversão.
A sintaxe de uma interface é parecida com a de uma classe, exceto que os métodos aparecem apenas como assinatura, sem corpo.
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 as operações definidas pela interface precisam ser implementadas pela classe que a implementa.
Interfaces geralmente contêm métodos de instância.
Um exemplo de interface da biblioteca de classes do Java, além de Cloneable ilustrada acima, é Comparable<T>. A interface Comparable<T> pode ser implementada quando é necessária uma ordem de classificação genérica padrão em coleções.
Neste exercício, você vai trabalhar mais um pouco com carros de controle remoto.
Um carro experimental foi desenvolvido e a pista de testes precisa ser adaptada para lidar tanto com os modelos de produção quanto com o experimental. Os dois tipos de carro já foram construídos e você precisa encontrar uma forma de lidar com ambos na pista de testes.
Além disso, os carros de produção estão começando a ter algum sucesso. O chefe da equipe quer manter o espírito competitivo publicando um ranking dos carros de produção.
Adicione dois métodos à interface RemoteControlCar:
drive(), que não retorna nada, egetDistanceTravelled(), que retorna um int.Depois, faça ProductionRemoteControlCar e ExperimentalRemoteControlCar implementarem a interface RemoteControlCar.
Isso inclui implementar todos os métodos exigidos pela interface.
Cada chamada de .drive() deve fazer o carro percorrer uma certa distância:
ProductionRemoteControlCar percorre 10 unidades,ExperimentalRemoteControlCar percorre 20 unidades.O método .getDistanceTravelled() deve retornar o número de unidades que o carro percorreu ao longo da sua vida útil.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Implemente o método TestTrack.race(RemoteControlCar car), no qual os cars podem drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Implemente a interface Comparable<T> na classe ProductionRemoteControlCar.
A ordem de classificação padrão dos carros deve ser a ordem decrescente de vitórias.
Implemente o método estático TestTrack.getRankedCars() para retornar os carros recebidos, ordenados em ordem decrescente de número de vitórias.
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
Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.