情况如下:
我的理解是,当为方法提供参数时(在这种情况下,它将是来自“AbstractButton”类的“addActionListener”方法),提供的对象需要是所需的类型之一(即:“ActionListener”对于“addActionListener”)或实现所需类型的类的类(即:实现“ActionListener”接口的类)。
另外,根据我的理解,“this”是指当前正在调用其方法的类实例,否则是指包含类。
现在这里有一些简单的代码:
public class Window extends JFrame implements ActionListener {
public Window () {
...
private JRadioButton btn = new JRadioButton("Option");
btn.addActionListener(this);
}
public actionPerformed ( ActionEvent e ) {
...
...
}
}
所以这是我的问题:这段代码可以正常工作:“this”关键字指的是正在调用其方法的对象的实例(“btn”),按钮充当它自己的侦听器(这就是) ,并且在单击按钮时按预期调用 actionPerformed 方法。但是,我不明白为什么会这样,因为以下原因:
- addActionListener 请求一个 ActionListener 作为参数
- “btn”是 JRadioButton 类型
- JRadioButton 不是 ActionListener 类型
- JRadioButton 没有实现 ActionListener(父类也没有)
有人可以澄清 addActionListener 接受这个对我来说似乎是错误类型的论点吗?
注意:我了解此示例中的 Window 类确实实现了 ActionListener,但我看不出它如何与 btn 变量的类型和 addActionListener 请求的类型进行交互。
谢谢你的时间,杰伊