因为它是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);
}
}
}
答案 0 :(得分:2)
由于MoveListener
内部类未声明static
,因此它本身带有对使用它的外部类实例的引用。
因为它有对外部类的引用,所以Java的编译器能够推断出你的意思,因为它是当前作用域中唯一具有该名称的可访问方法。 this
引用MoveListener
方法中的actionPerformed
,但是如果您GridButton.this.setContentAreaFilled(true)
GridButton
,它应该也可以正常工作,因为您明确要求OuterClassName.this.methodName
实例。
唯一需要使用{{1}}样式的方法是,如果外部类和内部类共享一个具有相同名称和签名的方法,则需要调用哪个方法是不明确的。< / p>
有关此主题的更多信息,请阅读Nested Classes。