1. Обзор
В этом кратком руководстве мы рассмотрим, как использовать аннотацию @Override
.
2. @Override
аннотация
В подклассе мы можем переопределить или перегрузить методы экземпляра. Переопределение указывает, что подкласс заменяет унаследованное поведение. Перегрузка — это когда подкласс добавляет новое поведение.
Иногда мы случайно перегружаемся, когда на самом деле намеревались переопределить. В 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;
}
В этот момент компилятор выдаст ошибку, сообщив нам, что мы не переопределяем равенство
, как мы думаем.
Тогда мы можем исправить нашу ошибку:
@Override
public boolean equals(Object obj) {
return true;
}
Из-за того, как легко случайно перегрузить, рекомендуется использовать аннотацию @Override
для всех унаследованных методов.
3. Заключение
В этом руководстве мы увидели, как аннотация @Override работает в Java.
Полный исходный код примеров можно найти на GitHub .