«1. Обзор
В этом кратком руководстве мы рассмотрим, как использовать аннотацию @Override.
2. @Override Annotation
В подклассе мы можем переопределить или перегрузить методы экземпляра. Переопределение указывает, что подкласс заменяет унаследованное поведение. Перегрузка — это когда подкласс добавляет новое поведение.
Иногда мы случайно перегружаемся, хотя на самом деле намеревались переопределить. В Java легко допустить эту ошибку:
public class Machine {
public boolean equals(Machine obj) {
return true;
}
@Test
public void whenTwoDifferentMachines_thenReturnTrue() {
Object first = new Machine();
Object second = new Machine();
assertTrue(first.equals(second));
}
}
Удивительно, но приведенный выше тест не проходит. Это связано с тем, что этот метод equals перегружает Object#equals, а не переопределяет его.
Мы можем использовать аннотацию @Override для унаследованных методов, чтобы защитить себя от этой ошибки.
В этом примере мы можем добавить аннотацию @Override над методом equals:
@Override
public boolean equals(Machine obj) {
return true;
}
В этот момент компилятор выдаст ошибку, сообщающую нам, что мы не переопределяем equals, как мы думаем.
Затем мы можем исправить нашу ошибку:
@Override
public boolean equals(Object obj) {
return true;
}
Из-за того, как легко случайно перегрузить, рекомендуется использовать аннотацию @Override для всех унаследованных методов.
3. Заключение
В этом руководстве мы увидели, как аннотация @Override работает в Java.
Полный исходный код примеров можно найти на GitHub.