Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免重写Java中的所有抽象方法_Java_Overriding_Abstract Class - Fatal编程技术网

避免重写Java中的所有抽象方法

避免重写Java中的所有抽象方法,java,overriding,abstract-class,Java,Overriding,Abstract Class,我想知道是否有任何方法可以从实现的接口或其他类中避免不必要的方法。 假设我有一个简单的类实现了MouseListener,而实际上我只需要一个方法mousePressed(MouseEvent e)来重写。但是,在这种情况下,我还必须重写接口中的所有其他方法,但保持它们为空,如下所示: public void mouseExited( MouseEvent e) {} public void mouseClicked( MouseEvent e) {} public void mouseRele

我想知道是否有任何方法可以从实现的接口或其他类中避免不必要的方法。
假设我有一个简单的类实现了
MouseListener
,而实际上我只需要一个方法
mousePressed(MouseEvent e)
来重写。但是,在这种情况下,我还必须重写接口中的所有其他方法,但保持它们为空,如下所示:

public void mouseExited( MouseEvent e) {}
public void mouseClicked( MouseEvent e) {}
public void mouseReleased( MouseEvent e) {}
public void mouseEntered( MouseEvent e) {}

即使其他方法在接口/超类中是抽象的,但仍然将我的类保持为非抽象的,是否有任何棘手的解决方案来覆盖我真正需要的唯一方法?

Extend
MouseAdapter
。它通过对每个方法不做任何操作来实现
MouseListener
。因此,您可以只覆盖您想要的解决方案。

JB Nizet的解决方案很好,但顺便问一下,为什么这是一个问题?使用像Eclipse这样的现代IDE,您只需单击一下即可添加所有要实现的方法(source>override/ImplementMethod)。
如果您使用适配器,这很实用,但您不能扩展适配器以外的其他类

但是如果我需要扩展其他类并实现几个接口呢?可以实现无限多个接口,但只能从一个类继承。因此,您必须做出选择。除此之外,如果您希望能够对任何其他接口执行此操作,您可以创建一个虚拟类,该类实现所有接口方法(并且不处理它们),然后扩展该类。不过我不建议这样做。如果MouseListener需要扩展MouseAdapter以外的类并实现几个接口,那么它可能尝试做得太多了。记住,你可以给它一个带引用参数的构造函数,这样它就和其他对象有一个has-a关系。我只是想知道如何避免不必要的代码,这些代码我根本不用,但需要放在我的类中。