Un'interfaccia è un tipo che contiene membri che definiscono un gruppo di funzionalità correlate. Tiene separati gli usi di una classe dall'implementazione, permettendo più implementazioni diverse o il supporto di un comportamento generico come la formattazione, il confronto o la conversione.
La sintassi di un'interfaccia è simile a quella di una classe, con la differenza che i metodi compaiono solo come firma e non ne viene fornito il 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;
}
}
Tutte le operazioni definite dall'interfaccia devono essere implementate dalla classe che la implementa.
Le interfacce di solito contengono metodi di istanza.
Un esempio di interfaccia presente nella libreria di classi di Java, oltre a Cloneable illustrata sopra, è Comparable<T>.
L'interfaccia Comparable<T> può essere implementata quando è richiesto un ordinamento generico predefinito nelle collezioni.
In questo esercizio lavorerai ancora un po' sulle macchine radiocomandate.
È stata sviluppata una macchina sperimentale e la pista di prova deve essere adattata per gestire sia i modelli di produzione sia quelli sperimentali. I due tipi di macchina sono già stati costruiti e devi trovare un modo per gestirli entrambi sulla pista di prova.
Inoltre, le macchine di produzione stanno iniziando ad avere un certo successo. Il capo della squadra ci tiene a mantenere lo spirito competitivo pubblicando una classifica delle macchine di produzione.
Aggiungi due metodi all'interfaccia RemoteControlCar:
drive(), che non restituisce nulla, egetDistanceTravelled(), che restituisce un int.Poi fai in modo che ProductionRemoteControlCar e ExperimentalRemoteControlCar implementino l'interfaccia RemoteControlCar.
Questo include l'implementazione di tutti i metodi richiesti dall'interfaccia.
Ogni chiamata a .drive() deve far percorrere alla macchina una certa distanza:
ProductionRemoteControlCar percorre 10 unità,ExperimentalRemoteControlCar percorre 20 unità.Il metodo .getDistanceTravelled() deve restituire il numero di unità che la macchina ha percorso in tutta la sua vita.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Implementa il metodo TestTrack.race(RemoteControlCar car), in cui le car possono eseguire drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Implementa l'interfaccia Comparable<T> nella classe ProductionRemoteControlCar.
L'ordine di ordinamento predefinito delle macchine deve essere quello decrescente per numero di vittorie.
Implementa il metodo statico TestTrack.getRankedCars() in modo che restituisca le macchine passate, ordinate in ordine decrescente per numero di vittorie.
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
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.