Использование Android @Override

(Новичок в Java, старый парень С#.)

Я заметил много использования @Override в коде кода Android. Я думал, что все Java-методы по умолчанию были "Виртуальными"?

Что тогда делает @Override?

Пример:

private class HelloWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

Ответ 1

Это аннотация, которую вы можете использовать, чтобы сообщить компилятору и вашей среде IDE, что вы намереваетесь использовать метод, который имеет эту аннотацию, чтобы переопределить метод суперкласса. У них есть предупреждения/ошибки, если вы ошибаетесь, например, если вы намереваетесь переопределить метод, но пропустите его, если в аннотации есть IDE или компилятор скажет вам, что на самом деле это не переопределяет метод суперкласса и, следовательно, вы можете определить причину и исправить орфографию.

Это тем более важно для приложений и видов деятельности для Android, например, когда все вызовы будут основаны на жизненном цикле активности - и если вы не будете правильно переопределять методы жизненного цикла, они никогда не будут вызваны инфраструктурой. Все будет хорошо компилироваться, но ваше приложение не будет работать так, как вы его намереваетесь. Если вы добавите аннотацию, вы получите сообщение об ошибке.

Ответ 2

Этот код для новичка, который действительно хочет понять процесс @Override, поможет вам! (Напомните концепцию наследования Java.)

Например, класс Fish может иметь два подкласса: FreshwaterFish и SaltwaterFish.

Эти подклассы будут иметь все функции класса Fish, но могут дополнительно настроить объекты с помощью новых атрибутов и поведения или модифицированного поведения из родительского класса Fish. Например, класс FreshwaterFish может включать информацию о типе пресноводной среды, в которой они жили (например, река, озеро, пруд или лужа).

Аналогично, класс SaltwaterFish может настроить метод makeBabyFish() таким образом, чтобы рыба ест своего помощника после разведения (как определено в суперклассе) с помощью механизма переопределения, например:

public class SaltwaterFish extends Fish  
{  
    @Override  
    public void makeBabyFish(Fish fishSpouse, int numBabies) {  
        // call parent method  
        super.makeBabyFish(fishSpouse, numBabies);  
        // eat mate  
        eat(fishSpouse);  
    }  
}

Ответ 3

Override-Annotation - это всего лишь подсказка для компилятора, который вы хотите перезаписать определенную функцию. Затем компилятор проверяет родительские классы и интерфейсы, если существует такая функция. Если нет, вы получите ошибку компиляции.

В основном это механизм безопасности.

Для справки см. в этой статье (переопределение объясняется где-то посередине)

Ответ 4

Переопределение в основном используется в случае определения метода. Перемещение аналогично его значению.

Я попытаюсь объяснить очень слабым способом. Предположим, если вы уже определили метод Oncreate() и связали с ним связанные свойства. и снова, когда вы вызываете метод Oncreate() в вашем коде для определенного объекта, код, который вы сейчас написали... переопределит формально определенное свойство или унаследованное свойство Oncreate() для вашего приложения.