无法覆盖超类的方法

时间:2015-02-08 22:46:25

标签: java swing

执行此操作时,我收到此错误:

The return type is incompatible with MouseAdapter.mouseClicked(MouseEvent)

类别:

public class MyMouseAdapter extends MouseAdapter
{
    public MyMouseAdapter()
    {
        // TODO Auto-generated constructor stub
    }

    @Override
    public String mouseClicked(MouseEvent e)
    {
        // TODO Auto-generated method stub

    }
}

哪里错了?原始方法是public void mouseClicked(MouseEvent e)

1 个答案:

答案 0 :(得分:5)

覆盖方法时,必须以子类绝对代表它的父方式的方式完成。在这种情况下,您将覆盖mouseClicked(MouseEvent e),不允许返回任何内容;这是void方法。因此,首先,要解决此问题,您需要将实现更改为:

public void mouseClicked(MouseEvent e) {
     /** Do stuff. **/
}

您不允许更改方法的返回类型的原因是因为在子类化子类时,您说子类可以与其父类完全相同的方式进行交互。所以,如果你有一个对象数组都继承自同一个父对象,你可以用这种通用的方式对待它们;你知道他们在调用mouseClick方法时都没有返回任何数据。

假设,如果这个类的某些实现在单击鼠标时返回String,而某些实现没有,那么与这些子类数组的泛型交互如何能够区分?这就是面向对象编程的力量发挥作用的地方; 可以以通用方式与MouseAdapter的实例进行交互,并允许它们以自己特定于类的方式覆盖此方法。

您可以通过向类中添加一些可以从mouseClicked(MouseEvent e)方法调用的方法来解决此问题,这可以让您处理String数据。在处理通用输入事件之后,这将确保以特定方式与子类交互。