oddg的onClick(View)方法必须重写一个超类方法?

15

我遇到了这样的错误:

“The method onClick(View) of type oddg must override a superclass method”。

我不确定错误具体出现在哪里。你能否指导一下我,这个错误是什么意思?

public class oddg extends Activity implements OnClickListener
{
        ProgressDialog dialog;
        int increment;
        int maximum ;
        private static final String TAG = "ServicesDemo";

        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main1);
            Button startbtn = (Button) findViewById(R.id.startbtn);
            startbtn.setOnClickListener(this);

        }

        @Override
        public void onClick(View arg0)
        { }
}

这是我的代码... 提前致谢-- Onkar


你是否在一个没有与父类或实现接口中的方法匹配的签名上使用了 @Override 注释?无论如何,如果您发布完整的最小代码以复制您的问题,人们将更能够帮助您。 - Thane Anthem
@thane,我已经编辑了我的问题并添加了代码。是的,我使用了@ Override注释,但我想知道应该怎么做,请指导我。 - Smith
7个回答

42

我认为问题在于你的编译器设置为Java 1.5而不是Java 1.6。从Java 1.6开始,注解@ Override不仅适用于从超类继承的方法,还适用于从接口实现的方法。但是如果你的编译器仍然设置为1.5,它将检查你是否覆盖了超类中的方法。在你的例子中,这并非如此,因为你正在实现从一个接口继承的方法。

另外一点值得注意的是,在你的代码中最好遵循Java命名规范。所以所有的类都应该以一个大写字母开头。


6
如果您使用的是Eclipse,请转到“窗口”-> “首选项”-> “Java”->“编译器”,然后将编译器兼容性级别更改为1.6。 - RoflcoptrException
7
我收到与Java 1.7相同的警告信息。这不奇怪吗! - png
只是补充一下,完成这个更改后重新启动Eclipse。 对我有用。 - Zappescu
谢谢你的解决方案,但是即使我更改为1.6,它仍然显示错误。因此,我不得不改为1.7并尝试(尽管有警告),这样就可以了。 - Lakshmi Narayanan
右键单击您的项目 => 属性 => Java编译器 => 将编译器兼容级别更改为1.6或1.7 - UMAR-MOBITSOLUTIONS

9

我也遇到了同样的问题,我是这样解决的:

  • 打开项目设置->Java编译器
  • 启用项目特定设置设置为禁用

3

虽然这与问题本身没有直接关系,但如果您在类声明上没有声明implements OnClickListener,那么您也会遇到此错误。

// Wrong
public class aClass extends Activity {
}
// Right
public class aClass extends Activity implements OnClickListener {
}

对于经验更丰富的编码人员来说,这可能很简单,但我是新手,它让我感到困惑。


2

我有同样的问题。我通过正确书写导入语句找到了解决方案。

我替换了原来的

import android.content.DialogInterface.OnClickListener; //(wrong)

for

import android.view.View.OnClickListener;

这是解决方案,一个错误的导入。 - Leonardo Sapuy
没错,我也用你的解决方案解决了这个问题。我的投票是 1+。 - imdadhusen

2
阅读关于 @Override 注释的内容。这意味着一旦你使用 @Override 注释了方法,编译器会检查它是否真的是一个重写的方法,如果不是,则会显示错误。
另外,你必须拥有语言级别 6 才能在接口实现方法中使用它。在 IDEA 中,你可以通过项目设置来完成。

0
如果您正在使用Android Studio,您也可以通过按下ctrl+O或转到代码->覆盖并覆盖适当的方法来重写您的方法。 它会自动覆盖您的方法。

0

"RoflcoptrException" 是正确的!你应该将Java编译器设置为1.6 项目属性-> Java编译器-> 1.6


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接