Az interfész egy olyan típus, amelynek tagjai egy összetartozó funkciókészletet definiálnak. Elválasztja az osztály használatát a megvalósítástól, ami lehetővé teszi több különböző implementációt, vagy támogatja az olyan általános viselkedést, mint a formázás, az összehasonlítás vagy a konverzió.
Az interfész szintaxisa hasonló az osztályéhoz, azzal a különbséggel, hogy itt a metódusok csak szignatúraként jelennek meg, törzs nélkül.
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;
}
}
Az interfész által definiált összes műveletet meg kell valósítania az implementáló osztálynak.
Az interfészek általában példánymetódusokat tartalmaznak.
A Java osztálykönyvtárban található interfészekre példa a fent bemutatott Cloneable mellett
a Comparable<T>. A Comparable<T> interfészt ott érdemes megvalósítani, ahol a
gyűjteményekben alapértelmezett általános rendezési sorrendre van szükség.
Ebben a feladatban ismét a távirányítós autókkal fogsz dolgozni.
Kifejlesztettek egy kísérleti autót, és a tesztpályát is át kell alakítani, hogy mind a sorozatgyártott, mind a kísérleti modelleket kezelni tudja. A két autótípus már elkészült, és neked kell megoldást találnod arra, hogy a tesztpálya mindkettővel boldoguljon.
Ráadásul a sorozatgyártott autók kezdenek sikereket elérni. A csapatfőnök szeretné fenntartani a versenyszellemet, ezért közzé akarja tenni a sorozatgyártott autók rangsorát.
Adj hozzá két metódust a RemoteControlCar interfészhez:
drive(), amely nem ad vissza semmit, ésgetDistanceTravelled(), amely egy int értéket ad vissza.Ezután gondoskodj róla, hogy a ProductionRemoteControlCar és az ExperimentalRemoteControlCar megvalósítsa a RemoteControlCar interfészt.
Ez magában foglalja az interfész által megkövetelt összes metódus megvalósítását is.
A .drive() minden egyes hívásakor az autónak egy bizonyos távolságot kell megtennie:
ProductionRemoteControlCar 10 egységet tesz meg,ExperimentalRemoteControlCar pedig 20 egységet.A .getDistanceTravelled() metódusnak azt kell visszaadnia, hány egységet tett meg az autó a teljes élettartama alatt.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Valósítsd meg a TestTrack.race(RemoteControlCar car) metódust, amelyben a car-ok drive()-olhatnak.
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Valósítsd meg a Comparable<T> interfészt a ProductionRemoteControlCar osztályban.
Az autók alapértelmezett rendezési sorrendje a győzelmek számának csökkenő sorrendje legyen.
Valósítsd meg a statikus TestTrack.getRankedCars() metódust, amely a kapott autókat a győzelmek számának csökkenő sorrendjében adja vissza.
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
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.