java - 匿名类和接口(interface)

标签 java swing oop interface anonymous-class

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

addActionListener 方法接受一个 ActionListener 接口(interface)作为它唯一的参数。

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

aButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // do stuff
    }
});

也就是说,通过使用匿名类,我们可以显式避免让整个类实现接口(interface)(如 header 中声明的那样),而是实例化接口(interface)的对象(根据接口(interface)的定义,这应该是不可能的)并在匿名类中实现接口(interface)的抽象方法。

所以只能实例化一个对象接口(interface),因为在那个时间点,需要履行一个契约(Contract)来实现接口(interface)的方法,这样做,允许我们从接口(interface)?

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

最佳答案

您没有实例化接口(interface)。

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

匿名类构造为您省去了命名一个只会在代码中一个非常特定的地方使用的类的麻烦。但如果你愿意,你可以决定这样做。在幕后它是同一件事——您已经定义了一个类来实现接口(interface),然后实例化了该类。

关于java - 匿名类和接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861011/

相关文章:

java - 数组长度不同,Junit 中预期长度 = 1 实际长度 = 0

php - 通过父类中的实例化类访问常量

java - 抽象类中的通用实例变量

javascript - 类与原型(prototype)属性

java - 如何增加org.eclipse.ant.core.antRunner的内存

java - Facebook 点赞按钮的说明

java - 如何忽略 PDFBox 2.0.7 使用的字体中缺失的字形

java - Swing 多线程。我的 GUI 卡住了

java - 高级应用程序中的 JButton 如何工作?

java - 添加数据作为参数后,Jtable 内容不会刷新