Java 匿名类和接口

Java 匿名类和接口,java,swing,oop,interface,anonymous-class,Java,Swing,Oop,Interface,Anonymous Class,我将用一个例子来说明我的问题: addActionListener方法接受ActionListener接口作为其唯一参数 因此,当在对象/组件(如按钮)上调用该方法以便通过使用匿名内部类向对象注册侦听器时,为什么我们还需要实现接口类?这是因为根据定义,接口不能被实例化,当然,除非您正在创建实现该接口的抽象方法的该接口类型的对象 i、 e 也就是说,通过使用匿名类,我们可以避免显式地使整个类实现接口(如标题中所声明的),而是实例化接口的对象(根据接口的定义,这是不可能的)以及在匿名类中实现接口的抽

我将用一个例子来说明我的问题:

addActionListener方法接受ActionListener接口作为其唯一参数

因此,当在对象/组件(如按钮)上调用该方法以便通过使用匿名内部类向对象注册侦听器时,为什么我们还需要实现接口类?这是因为根据定义,接口不能被实例化,当然,除非您正在创建实现该接口的抽象方法的该接口类型的对象

i、 e

也就是说,通过使用匿名类,我们可以避免显式地使整个类实现接口(如标题中所声明的),而是实例化接口的对象(根据接口的定义,这是不可能的)以及在匿名类中实现接口的抽象方法

因此,只可能在接口中实例化一个对象,因为在那个时候,需要履行一个契约来实现接口的方法,在这样做的过程中,允许我们从接口生成一个对象


因此,我们之所以能够实现接口的actionPerformed()方法,是因为我们已经从接口实例化了一个对象(这同时要求我们履行实现抽象方法的契约)?那么是否可以说,我们是通过接口的就地实例化来隐式地实现接口(作为addActionListener参数)?

您不是在实例化接口

您正在定义和实例化一个实际的、具体的类来实现接口。您需要实现接口中声明的每个方法,就像编写一个实现接口的“普通”类一样


匿名类构造省去了命名一个只在代码中一个非常特定的位置使用的类的麻烦。但如果你想,你可以决定这么做。在封面下是一样的——您定义了一个类来实现接口,然后实例化了该类。

我认为您想得太多了。您正在定义一个实现接口的具体类,并实例化该具体类的对象。与实现接口的命名类相同,只是没有给类命名。恐怕我不明白你在问什么。接口可以被看作是一个契约,它定义了一组函数,任何实现类都保证提供这些函数
addActionListener
是说“我需要一些可以做的东西”
ActionListener
stuff”
aButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do stuff
    }
});