Що означає @Override?


74
public class NaiveAlien extends Alien
{

    @Override
    public void harvest(){}

}

Я намагався зрозуміти код мого друга, і я не отримую синтаксису @Override у коді. Що це робить і навіщо нам потрібно в кодуванні? Дякую.

Відповіді:


131

Це підказка для компілятора, щоб він повідомив, що ви перевизначаєте метод батьківського класу (або інтерфейсу в Java 6).

Якщо компілятор виявить, що немає функції, яку можна замінити, він попередить вас (або помилку).

Це надзвичайно корисно для швидкого виявлення помилок або помилок API. Скажімо, ви намагаєтесь замінити метод батьківського класу, harvest()але напишіть його harvset(), ваша програма мовчки викличе базовий клас, і без цього у @Overrideвас не буде жодного попередження про це.

Аналогічним чином, якщо ви використовуєте бібліотеку, а у версії 2 бібліотеки harvest()було змінено, щоб прийняти цілочисельний параметр, ви більше не будете його замінювати. Знову ж таки, @Overrideшвидко сказав би вам.


18
Зауважте, що @Override працює лише для загальнодоступних та захищених функцій.
MrMas

Слід також зазначити, що також можливі декілька анотацій, і що за допомогою цього можна також додати інший код. Наприклад, під час перевірки дозволів у програмах Android M, як це робиться в PermissionsDispatcher .
not2qubit

29

Ця функція називається анотацією. @Override- це синтаксис використання анотації, щоб повідомити компілятор, "агов компілятор, я змінюю те, що робить урожай у батьківському класі", тоді компілятор може негайно сказати: "чувак, ти назвав його неправильно". Компілятор не буде компілювати, поки ви його правильно не назвете.

Отже, без цієї @Overrideанотації компілятор не помилиться, і це буде розглядатися як нова декларація методу. На даний момент буде важко розпізнати помилку.


1
@Override
Великі

9

@Overrideозначає, що ви перевизначаєте метод базового класу. У java6 це також означає, що ви реалізуєте метод з інтерфейсу. Він захищає вас від помилок, коли ви думаєте, що перевизначаєте метод, але ви щось ввели неправильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.