内部类中的构造函数(实现接口)

如何为实现接口的内部类编写构造函数?我知道我可以做一个全新的课程,但我认为必须有一种方法可以沿着这条线做一些事情:

JButton b = new JButton(new AbstractAction() {

    public AbstractAction() {
        super("This is a button");                        
    }


    public void actionPerformed(ActionEvent e) {
        System.out.println("button clicked");
    }
}); 

当我输入这个时,它不会将 AbstractAction 方法识别为构造函数(编译器要求返回类型)。有人有想法吗?


答案 1

只需在扩展类的名称后插入参数:

JButton b = new JButton(new AbstractAction("This is a button") {

    public void actionPerformed(ActionEvent e) {
        System.out.println("button clicked");
    }
}); 

此外,您还可以使用初始化块:

JButton b = new JButton(new AbstractAction() {

    {
       // Write initialization code here (as if it is inside a no-arg constructor)
       setLabel("This is a button")
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("button clicked");
    }
}); 

答案 2

如果你出于某种原因真的需要一个构造函数,那么你可以使用一个初始化块:

JButton b = new JButton(new AbstractAction() {

    {
        // Do whatever initialisation you want here.
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("button clicked");
    }
}); 

但你不能从那里调用超类构造函数。正如Itay所说,你可以把你想要的论点传递给new。

不过就我个人而言,我会为此创建一个新的内部类:

private class MyAction extends AbstractAction {

    public MyAction() {
        super("This is a button.");
    }

    public void actionPerformed(ActionEvent e) {
        System.out.println("button clicked");
    }
}

然后:

JButton b = new JButton(new MyAction());