Інтерфейс - це тип, що містить члени, які визначають групу повʼязаної функціональності. Він відділяє використання класу від реалізації, що дозволяє мати кілька різних реалізацій або підтримувати якусь узагальнену поведінку, як-от форматування, порівняння чи перетворення.
Синтаксис інтерфейсу подібний до синтаксису класу, за винятком того, що методи подаються лише як сигнатури, а їхнє тіло не наводиться.
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;
}
}
Усі операції, визначені інтерфейсом, має реалізувати клас, який його реалізує.
Зазвичай інтерфейси містять методи екземпляра.
Прикладом інтерфейсу з бібліотеки класів Java, крім Cloneable, показаного вище, є Comparable<T>.
Інтерфейс Comparable<T> можна реалізувати там, де потрібен типовий узагальнений порядок сортування в колекціях.
У цій вправі ми попрацюємо ще трохи з автомобілями з дистанційним керуванням.
Розроблено експериментальний автомобіль, і випробувальний трек потрібно адаптувати так, щоб він міг приймати як серійні, так і експериментальні моделі. Обидва типи автомобілів уже побудовано, і нам потрібно знайти спосіб працювати з ними обома на випробувальному треку.
До того ж серійні автомобілі починають здобувати певний успіх. Керівник команди прагне підтримувати змагальний дух, публікуючи рейтинг серійних автомобілів.
Додайте два методи до інтерфейсу RemoteControlCar:
drive(), що нічого не повертає, іgetDistanceTravelled(), що повертає int.Потім зробіть так, щоб ProductionRemoteControlCar і ExperimentalRemoteControlCar реалізували інтерфейс RemoteControlCar.
Це включає реалізацію всіх методів, які вимагає інтерфейс.
Після кожного виклику .drive() автомобіль має проїжджати певну відстань:
ProductionRemoteControlCar проїжджає 10 одиниць,ExperimentalRemoteControlCar проїжджає 20 одиниць.Метод .getDistanceTravelled() має повертати кількість одиниць, які автомобіль проїхав за весь час свого існування.
ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20
Реалізуйте метод TestTrack.race(RemoteControlCar car), у якому автомобілі, передані як car, отримують можливість викликати drive().
TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown
Реалізуйте інтерфейс Comparable<T> у класі ProductionRemoteControlCar.
Типовий порядок сортування автомобілів має бути за спаданням кількості перемог.
Реалізуйте статичний метод TestTrack.getRankedCars(), щоб він повертав передані автомобілі, відсортовані за спаданням кількості перемог.
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
Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.