既然是MoveListener的方法,为什么对象是GridButton呢? 如果我将其更改为 this.setContentAreaFilled(true),则不会编译,因为该对象是 MoveListener。
private class GridButton extends JButton {
public GridButton() {
setOpaque(false);
setContentAreaFilled(false);
setBorderPainted(false);
addActionListener(new MoveListener());
}
private class MoveListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
setContentAreaFilled(true);
}
}
}
最佳答案
由于您的 MoveListener
内部类未声明为 static
,因此它本质上携带对使用它的外部类实例的引用。
因为它具有对外部类的引用,Java 编译器能够推断出您的意思,因为它是当前范围内具有该名称的唯一可访问方法。 this
引用 actionPerformed
方法中的 MoveListener
,但是如果您执行了 GridButton.this.setContentAreaFilled(true)
它应该也可以工作,因为您明确要求 GridButton
实例。
唯一需要使用 OuterClassName.this.methodName
样式的情况是外部类和内部类共享一个具有相同名称和签名的方法,这样就不清楚是哪个方法需要调用方法。
有关此主题的更多信息,请阅读 Nested Classes .
关于java - actionPerformed(ActionEvent e) 方法中的对象是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469583/