Подтвердить что ты не робот

Почему я должен "переопределить метод суперкласса" с помощью @Override?

Следующий код генерирует это сообщение об ошибке в строке public void onClick.

Несколько маркеров в этой строке
  - реализует android.view.View.OnClickListener.onClick
  - Метод onClick (View) типа new View.OnClickListener() {} должен переопределить метод суперкласса

Я не понимаю, почему. Этот код взят из многочисленных примеров, которые я видел. Что может быть неправильным?

private Button audioButton;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    audioButton = (Button) findViewById(R.id.imageButton1);
    audioButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View button) {
            if (button.isSelected()) {
                button.setSelected(false);
            }
            else {
                button.setSelected(true);
            }
        }
    });
}
4b9b3361

Ответ 1

Проверьте свойства проекта и убедитесь, что Компилятор Java → Уровень соответствия компилятора установлен на 1.6.

Ответ 2

Это, скорее всего, связано с несовместимостью уровня исходного кода между Java 1.5 и 1.6.

  • В Java 5 аннотация @Override требует, чтобы этот метод фактически переопределял метод в суперклассе.

  • В Java 6 и более поздних версиях аннотация @Override также будет выполняться, если метод реализует абстрактный метод в суперклассе или интерфейсе.

Таким образом, наиболее вероятная причина видеть это в коде, который вы ожидаете работать, заключается в том, что вы компилируете код Java 6 (или более поздний) с помощью компилятора Java 5 (или другого компилятора с уровнем соответствия источника компилятора, установленным в 5).

Ответ 3

Если вы установите компилятор в 1.6 и по-прежнему получите эту ошибку, попробуйте проверить свой импорт, потому что то, что делает Eclipse, заключается в том, что он всегда пытается это сделать

import android.content.DialogInterface.OnClickListener  

вместо →

import android.view.View.OnClickListener

Это решает мою проблему.

Ответ 4

MAVEN USERS Если вы используете Maven для сборки, он может переопределить настройки eclipse во время сборки. Поэтому, если вы установите Eclipse в 1.7, но специально не устанавливаете версию сборки Maven JDK (которая на момент написания этой статьи по умолчанию равна 1,5), то она будет reset целевым компилятором eclipse вернуться к 1.5. Установите компилятор Maven следующим образом.

    <build>
        ...
        <plugins>
            ....
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>            
    </build>

Ответ 5

Установка View.onCLickListener() решила проблему для меня. Мой Java Compiler → Compiler Compliance level уже установлен на 1.6, но все же у меня возникла та же проблема.

Но, изменяя код

rdBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRadioButtonClicked(v);
            }
        });

в

rdBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                onRadioButtonClicked(v);
            }
        });

решил проблему в моем случае.

Ответ 6

Для меня это произошло потому, что метод, который я хотел переопределить, был закрытый, и я попытался переопределить его из другого пакета.

Eclipse дополнительно добавит предупреждение в этом случае, которое я не заметил из-за тонны других предупреждений

Ответ 7

Теперь это 2018! Для получения дополнительной информации см. Снимок экрана ниже.

enter image description here

Ответ 8

Если смена компилятора на 1.6 не работает, обновите проект и создайте его.

Это сработало для меня.