请高手解释下为什么这个接口被实例化了

在ComboBox中遇见的一个问题

        comboBox.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO Auto-generated method stub
                System.out.println(comboBox.getSelectedItem());
            }
        });

我查了api,上面明确写着ActionListener()是一个接口,而我记得接口是不能实例化的,
另一点是学接口的时候我记得是接口下只有方法名,没有方法体,那这个actionPerformed这个方法,按理说是没有方法体的,那他是怎么执行当发生操作时调用这个方法呢,我的意思是为什么是在指定发生操作是进行调用,而不是其他行为,比如计时变化,毕竟接口没有方法体啊,很不理解

接口确实不能被实例化,这个new ActionListen表面上是实例化这个接口,实际上它只是一种内部匿名类,这种匿名类是实现了接口,你new出来还是要重写方法的。

这是通过匿名类的方式创建的一个实例对象的,匿名类用在我们需要使用某个接口或者类,但是又不想专门定义一个类来实现,这时就可以使用匿名类的方式创建一个接口的实现类的实例,这样只是一次性的,实例化一个接口,不会增加新的类。

http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html,new ActionListen后面的大括号里面就是实现ActionListen接口的方法,没有编译会报错,只是因为不想写个实现类去实现它,才这样定义的,你也可以自己写个实现类啊。

接口是不能被实例化 的,但是匿名内部类相当无一个实现了此接口的子类,这个子类不是抽象的,当然能够被new出来啦,而且要实现父类的抽象方法。

相当于你在括号里面写了个类,实现了这个接口,然后你又懒得给类起名字,这是这个样子了,去搜搜匿名内部类就知道啦