这样做时,我收到此错误:
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)
覆盖方法时,必须以子类绝对表示它的父级的方式完成.在这种情况下,你是最重要的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数据.在处理通用输入事件之后,这将确保以特定方式与子类交互.