Как вы уже поняли, объекты определяют свое взаимодействие с внешним миром посредством методов, которые они предоставляют. Методы формируют интерфейс объекта с внешним миром; кнопки на передней панели вашего телевизора, например, являются интерфейсом между вами и электропроводкой на другой стороне пластикового корпуса. Вы нажимаете кнопку "питание", чтобы включать и выключать телевизор.
В своей наиболее распространенной форме интерфейс представляет собой группу связанных методов с пустыми телами. Поведение bicycle, если оно указано в качестве интерфейса, может выглядеть следующим образом:
interface Bicycle {
void changeCadence(int newValue);
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
Для реализации этого интерфейса имя вашего класса должно измениться (например, велосипед определенной марки - ACMEBicycle), и вы должны использовать implements ключевое слово в объявлении класса:
class ACMEBicycle implements Bicycle {
int cadence = 0;
int speed = 0;
int gear = 1;
// Необходимо, чтобы все методы интерфейса получили реализации методов
// в классе
public void changeCadence(int newValue) {
cadence = newValue;
}
public void changeGear(int newValue) {
gear = newValue;
}
public void speedUp(int increment) {
speed = speed + increment;
}
public void applyBrakes(int decrement) {
speed = speed - decrement;
}
public void printStates() {
System.out.println("cadence:" +
cadence + " speed:" +
speed + " gear:" + gear);
}
}
Реализация интерфейса позволяет классу стать более формальным в отношении поведения, которое он обещает предоставлять. Интерфейсы формируют контракт между классом и внешним миром, и этот контракт обеспечивается компилятором во время сборки. Если ваш класс утверждает, что реализует интерфейс, все методы, определенные этим интерфейсом, должны появиться в его исходном коде, прежде чем класс будет успешно скомпилирован.
Чтобы скомпилировать ACMEBicycle класс, вам нужно добавлять ключевое слово public в начало реализаций методов в классе. В описании интерфейса данное ключевое слово подразумевается по умолчанию и указывать его не требуется.