Может кому будет полезно. Если над сигнатурой метода вы пишете @Override, то Java автоматически проверит переопределение этого метода, и если таковое отсутствует - не даст скомпилировать код. Сделано это, я так понимаю, для следующего случая (по шагам):
1. Есть интерфейс, в нём набор методов. (пока всё логично)
2. Вы обнаружили интерфейс, ознакомились с ним, и имплементировали в свой класс.
3. По каким-то причинам интерфейс был изенён, и теперь в нём один из методов отсутствует или пишется по-другому - вот здесь и кроется фишка.
Если там просто новый метод, то вам нужно будет явно его реализовать в своём классе - логично. А если удалён один из старых, то ваш метод станет необязательным для имплементации интерфейса, но вполне законным с точки зрения класса. И поэтому если вы написали @Override, то Java предупредит вас - этот метод уже ничего не переопределяет, он просто есть на уровне класса, не смотря на ваше явное замечание, и выдаст ошибку компиляции.
Всё в порядке, методы из интерфейсов переопределены
public interface CanRun { public void run(); }
public interface CanSwim { public void swim(); }
public class Human implements CanRun, CanSwim {
@Override
public void run() { }
@Override
public void swim() { }
}
А здесь выдаст ошибку, т.к. метод run() существует уже не как переопределённый, а как существующий просто на уровне класса:
public interface CanRun { /* ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА */ }
public interface CanSwim { public void swim(); }
public class Human implements CanRun, CanSwim {
@Override
public void run() { }
@Override
public void swim() { }
}
Чтобы Java автоматически переопределила необходимые методы, достаточно нажать Ctrl + I