执行此操作时,我收到此错误:
The return type is incompatible with MouseAdapter.mouseClicked(MouseEvent)
类(class):
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)
最佳答案
当重写一个方法时,必须以子类绝对代表其父类的方式完成。在这种情况下,您将重写 mouseClicked(MouseEvent e)
,它不允许返回任何内容;这是一个 void
方法。因此,首先,要解决这个问题,您需要将实现更改为:
public void mouseClicked(MouseEvent e) {
/** Do stuff. **/
}
不允许更改方法的返回类型的原因是,当对父类进行子类化时,您是说子类可以以与父类完全相同的方式进行交互。因此,如果您有一个全部继承自同一个父对象的对象数组,则可以以这种通用方式处理它们;您知道,当调用它们的 mouseClick
方法时,它们都不会返回任何数据。
假设来说,如果单击鼠标时此类的某些实现返回一个 String
,而另一些则没有,那么与这些子类的数组的通用交互如何能够告诉不同之处?这就是面向对象编程的力量发挥作用的地方;您可以以通用方式与MouseAdapter
实例进行交互,并允许它们以自己的类特定方式重写此方法。
您可以通过向类添加一些方法来解决此问题,这些方法可以从 mouseClicked(MouseEvent e)
方法调用,这将允许您处理您的 String
数据。这将确保在处理通用输入事件后以特定方式与子类进行交互。
关于java - 无法重写父类(super class)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400275/