无法覆盖超类的方法

Seg*_*ult 0 java swing

这样做时,我收到此错误:

The return type is incompatible with MouseAdapter.mouseClicked(MouseEvent)
Run Code Online (Sandbox Code Playgroud)

类:

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

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

Map*_*psy 5

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

public void mouseClicked(MouseEvent e) {
     /** Do stuff. **/
}
Run Code Online (Sandbox Code Playgroud)

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

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

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