Может кому будет полезно. Если над сигнатурой метода вы пишете @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