Почему я получаю «должен переопределить метод суперкласса» с @Override? - PullRequest
62 голосов
/ 02 января 2012

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

Несколько маркеров в этой строке
- реализует android.view.View.OnClickListener.onClick
- TheМетод 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);
            }
        }
    });
}

Ответы [ 7 ]

139 голосов
/ 02 января 2012

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

46 голосов
/ 02 января 2012

Это наиболее вероятно из-за несовместимости уровня исходного кода между Java 1.5 и 1.6.

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

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

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

4 голосов
/ 08 июля 2016

MAVEN USERS Если вы используете Maven для сборки, он может переопределить настройки eclipse во время сборки. Таким образом, если вы установите Eclipse на 1.7, но не определите версию сборки Maven JDK (которая на момент написания по умолчанию равна 1.5), он вернет целевой компилятор 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>
4 голосов
/ 20 июля 2012

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

import android.content.DialogInterface.OnClickListener  

вместо ->

import android.view.View.OnClickListener

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

0 голосов
/ 03 ноября 2018

Теперь 2018 год!Для удобства смотрите скриншот ниже.

enter image description here

0 голосов
/ 25 января 2017

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

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

0 голосов
/ 27 сентября 2013

Установка View.onCLickListener() решила проблему для меня. Мой Java Compiler -> Compliance 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);
            }
        });

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...