自动调用已实现的方法?
Calling on an implemented method automatically?
我很好奇 implements
关键字是如何工作的,我希望有人能向我解释一下,实现的方法在哪里被调用?
例如,假设我有一个实现了 ActionListener
的 class。它现在实现了
public void actionPerformed(ActionEvent e) {
}
方法。我有一个绑定到此 ActionListener
的按钮。但是它是如何调用这个方法的呢?它怎么知道我的 class 实现了这个方法。
它知道您的 class 实现了侦听器,因为 addActionListener(...)
方法的参数只接受实现 ActionListener 接口的 classes。它调用该方法是因为在 AbstractButton 的内部结构中,它知道其 List 中包含这些侦听器的所有对象都实现了 ActionListener 接口,因此具有 actionPerformed 方法。有关更多详细信息,请考虑查看 AbstractButton 的源代码,您会确切地看到它在哪里执行此操作。如果磁盘上还没有 src.zip
文件,Google 可以帮助您找到来源。
这在Java中叫做"dynamic binding"。您可以在此处阅读详细信息,例如 http://www.studytonight.com/java/dynamic-method-dispatch.php
我很好奇 implements
关键字是如何工作的,我希望有人能向我解释一下,实现的方法在哪里被调用?
例如,假设我有一个实现了 ActionListener
的 class。它现在实现了
public void actionPerformed(ActionEvent e) {
}
方法。我有一个绑定到此 ActionListener
的按钮。但是它是如何调用这个方法的呢?它怎么知道我的 class 实现了这个方法。
它知道您的 class 实现了侦听器,因为 addActionListener(...)
方法的参数只接受实现 ActionListener 接口的 classes。它调用该方法是因为在 AbstractButton 的内部结构中,它知道其 List 中包含这些侦听器的所有对象都实现了 ActionListener 接口,因此具有 actionPerformed 方法。有关更多详细信息,请考虑查看 AbstractButton 的源代码,您会确切地看到它在哪里执行此操作。如果磁盘上还没有 src.zip
文件,Google 可以帮助您找到来源。
这在Java中叫做"dynamic binding"。您可以在此处阅读详细信息,例如 http://www.studytonight.com/java/dynamic-method-dispatch.php