«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.