执行此操作时,我收到此错误:
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)
答案 0 :(得分:5)
覆盖方法时,必须以子类绝对代表它的父方式的方式完成。在这种情况下,您将覆盖mouseClicked(MouseEvent e)
,不允许返回任何内容;这是void
方法。因此,首先,要解决此问题,您需要将实现更改为:
public void mouseClicked(MouseEvent e) {
/** Do stuff. **/
}
您不允许更改方法的返回类型的原因是因为在子类化子类时,您说子类可以与其父类完全相同的方式进行交互。所以,如果你有一个对象数组都继承自同一个父对象,你可以用这种通用的方式对待它们;你知道他们在调用mouseClick
方法时都没有返回任何数据。
假设,如果这个类的某些实现在单击鼠标时返回String
,而某些实现没有,那么与这些子类数组的泛型交互如何能够区分?这就是面向对象编程的力量发挥作用的地方; 可以以通用方式与MouseAdapter
的实例进行交互,并允许它们以自己特定于类的方式覆盖此方法。
您可以通过向类中添加一些可以从mouseClicked(MouseEvent e)
方法调用的方法来解决此问题,这可以让您处理String
数据。在处理通用输入事件之后,这将确保以特定方式与子类交互。