Uma interface é um tipo que contém membros que definem um conjunto de funcionalidades relacionadas. Afasta a utilização de uma classe da implementação, permitindo várias implementações diferentes ou o suporte de um comportamento genérico, como formatação, comparação ou conversão.
A sintaxe de uma interface é semelhante à de uma classe, exceto que os métodos aparecem apenas como assinatura e não têm 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 têm de ser implementadas pela classe que a implementa.
As interfaces contêm normalmente 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 ordenação genérica predefinida em coleções.
Neste exercício vais trabalhar mais um pouco com carros telecomandados.
Foi desenvolvido um carro experimental e a pista de testes precisa de ser adaptada para lidar tanto com os modelos de produção como com os experimentais. Os dois tipos de carro já estão construídos e tens de arranjar forma de lidar com ambos na pista de testes.
Além disso, os carros de produção começam a ter algum sucesso. O chefe de equipa está empenhado em manter o espírito competitivo, publicando uma classificação dos carros de produção.
Adiciona dois métodos à interface RemoteControlCar:
drive(), que não devolve nada, egetDistanceTravelled(), que devolve um int.Depois, faz com que ProductionRemoteControlCar e ExperimentalRemoteControlCar implementem a interface RemoteControlCar.
Isto inclui implementar todos os métodos exigidos pela interface.
Cada chamada a .drive() deve fazer o carro percorrer uma determinada distância:
ProductionRemoteControlCar percorre 10 unidades,ExperimentalRemoteControlCar percorre 20 unidades.O método .getDistanceTravelled() deve devolver o número de unidades que o carro percorreu ao longo da sua vida.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Implementa o método TestTrack.race(RemoteControlCar car), no qual os cars fazem drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Implementa a interface Comparable<T> na classe ProductionRemoteControlCar.
A ordem de ordenação predefinida para os carros deve ser a ordem decrescente de vitórias.
Implementa o método estático TestTrack.getRankedCars() para devolver os carros recebidos, ordenados por ordem decrescente do 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
Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.