Ein Interface ist ein Typ, der Member enthält, die eine Gruppe zusammengehöriger Funktionalität definieren. Es trennt die Verwendung einer Klasse von der Implementierung und ermöglicht so mehrere unterschiedliche Implementierungen oder die Unterstützung eines generischen Verhaltens wie Formatierung, Vergleich oder Konvertierung.
Die Syntax eines Interfaces ähnelt der einer Klasse, außer dass Methoden nur als Signatur erscheinen und kein Rumpf angegeben wird.
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;
}
}
Alle Operationen, die das Interface definiert, müssen von der implementierenden Klasse implementiert werden.
Interfaces enthalten normalerweise Instanzmethoden.
Ein Beispiel für ein Interface in der Java-Klassenbibliothek, neben dem oben gezeigten Cloneable, ist Comparable<T>. Das Comparable<T>-Interface kann implementiert werden, wenn eine standardmäßige generische Sortierreihenfolge für Sammlungen erforderlich ist.
In dieser Übung arbeitest du weiter an ferngesteuerten Autos.
Ein Experimentalauto wurde entwickelt, und die Teststrecke muss angepasst werden, damit sie sowohl mit Serien- als auch mit Experimentalmodellen umgehen kann. Die beiden Fahrzeugtypen sind bereits gebaut, und du musst einen Weg finden, auf der Teststrecke mit beiden umzugehen.
Außerdem beginnen die Serienautos, erste Erfolge zu erzielen. Der Teamchef möchte den Wettbewerbsgeist erhalten, indem er eine Rangliste der Serienautos veröffentlicht.
Bitte füge der Schnittstelle RemoteControlCar zwei Methoden hinzu:
drive(), die nichts zurückgibt, undgetDistanceTravelled(), die ein int zurückgibt.Dann lass ProductionRemoteControlCar und ExperimentalRemoteControlCar die Schnittstelle RemoteControlCar implementieren.
Dazu gehört es, alle Methoden zu implementieren, die die Schnittstelle vorschreibt.
Jeder Aufruf von .drive() soll das Auto eine bestimmte Strecke fahren lassen:
ProductionRemoteControlCar fährt 10 Einheiten,ExperimentalRemoteControlCar fährt 20 Einheiten.Die Methode .getDistanceTravelled() soll die Anzahl der Einheiten zurückgeben, die das Auto insgesamt zurückgelegt hat.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Implementiere die Methode TestTrack.race(RemoteControlCar car), in der die car-Objekte drive() aufrufen dürfen.
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Bitte implementiere die Schnittstelle Comparable<T> in der Klasse ProductionRemoteControlCar.
Die standardmäßige Sortierreihenfolge der Autos soll nach der Anzahl der Siege absteigend sein.
Implementiere die statische Methode TestTrack.getRankedCars(), die die übergebenen Autos zurückgibt, absteigend nach der Anzahl der Siege sortiert.
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
Melde dich bei Exercism an, um Java mit 26 Konzepte158 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.