Une interface est un type dont les membres définissent un ensemble de fonctionnalités liées. Elle sépare les usages d'une classe de l'implémentation, ce qui permet plusieurs implémentations différentes ou la prise en charge d'un comportement générique tel que le formatage, la comparaison ou la conversion.
La syntaxe d'une interface est similaire à celle d'une classe, à ceci près que les méthodes n'apparaissent que sous forme de signature et qu'aucun corps n'est fourni.
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;
}
}
Toutes les opérations définies par l'interface doivent être implémentées par la classe qui l'implémente.
Les interfaces contiennent généralement des méthodes d'instance.
Un exemple d'interface que l'on trouve dans la bibliothèque de classes Java, outre Cloneable, illustrée ci-dessus, est Comparable<T>.
L'interface Comparable<T> peut être implémentée lorsqu'un ordre de tri générique par défaut est nécessaire dans les collections.
Dans cet exercice, on va continuer à travailler sur des voitures télécommandées.
Une voiture expérimentale a été développée et la piste d'essai doit être adaptée pour accueillir aussi bien les modèles de série que les modèles expérimentaux. Les deux types de voiture ont déjà été construits et tu dois trouver un moyen de gérer les deux sur la piste d'essai.
De plus, les voitures de série commencent à remporter quelques succès. Le patron de l'équipe tient à entretenir l'esprit de compétition en publiant un classement des voitures de série.
Ajoute deux méthodes à l'interface RemoteControlCar :
drive(), qui ne renvoie rien, etgetDistanceTravelled(), qui renvoie un int.Fais ensuite en sorte que ProductionRemoteControlCar et ExperimentalRemoteControlCar implémentent l'interface RemoteControlCar.
Cela implique d'implémenter toutes les méthodes exigées par l'interface.
Chaque appel à .drive() doit faire avancer la voiture d'une certaine distance :
ProductionRemoteControlCar parcourt 10 unités,ExperimentalRemoteControlCar parcourt 20 unités.La méthode .getDistanceTravelled() doit renvoyer le nombre d'unités que la voiture a parcourues au total.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Implémente la méthode TestTrack.race(RemoteControlCar car), dans laquelle les cars peuvent appeler drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Implémente l'interface Comparable<T> dans la classe ProductionRemoteControlCar.
L'ordre de tri par défaut des voitures doit être l'ordre décroissant du nombre de victoires.
Implémente la méthode statique TestTrack.getRankedCars() pour qu'elle renvoie les voitures passées en argument, triées par nombre de victoires décroissant.
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
Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.