为什么使用 @Override 时会出现“必须重写超类方法”?

新手上路,请多包涵

以下代码在 public void onClick 行生成此错误消息。

此行有多个标记

- 实现 android.view.View.OnClickListener.onClick

- new View.OnClickListener(){} 类型的 onClick(View) 方法必须覆盖超类方法

我不明白为什么。这段代码摘自我见过的许多例子。什么可能是错的?

 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);
            }
        }
    });
}

原文由 Richard Eng 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

检查项目的属性并验证 Java Compiler -> Compiler compliance level 是否设置为 1.6 (或更高版本)。

它对我有用……我正在使用 eclipse 2021……并且……

原文由 Diego Torres Milano 发布,翻译遵循 CC BY-SA 4.0 许可协议

这很可能是由于 Java 1.5 和 1.6 之间源代码级别的不兼容。

  • 在 Java 5 中, @Override 注释要求该方法实际上覆盖超类中的方法。

  • 在 Java 6 及更高版本中,如果该方法在超类或接口中实现抽象方法,则 @Override 注释 将得到满足。

因此,在您期望运行的代码中看到这一点的最可能原因是您正在使用 Java 5 编译器(或编译器的源代码合规性级别设置为 5 的其他编译器)编译 Java 6(或更高版本)代码。

原文由 Stephen C 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题