当您实现它、创建对象并将该对象注册到事件源时,这样的接口就开始有用了。注册部分在这里很关键——如果您注册到鼠标点击事件,那么这就是对象将收到的内容。
所以基本上这些接口看起来很相似,因为它们用于处理类似的事件,但最终你只会被告知你注册的事件。这里没有魔法 - 事件源在内部保留对某些事件感兴趣的侦听器的集合,如果发生此类事件,它会遍历集合并调用侦听器方法。
例如,您提到的鼠标侦听器接口有几个方法:
public interface MouseListener extends EventListener {
public void mouseClicked(MouseEvent e);
public void mousePressed(MouseEvent e);
...
}
如果您查看该类的一部分,java.awt.Component
您会发现它是负责调用正确方法的事件源:
public abstract class Component implements ImageObserver, MenuContainer,
Serializable
{
...
protected void processMouseEvent(MouseEvent e) {
MouseListener listener = mouseListener;
if (listener != null) {
int id = e.getID();
switch(id) {
case MouseEvent.MOUSE_PRESSED:
listener.mousePressed(e); // invoking a specific listener's method
break;
case MouseEvent.MOUSE_RELEASED:
listener.mouseReleased(e);
break;
...
}