我将使用一个例子说明我的问题:
addActionListener方法接受ActionListener接口作为其唯一参数。
因此,当在对象/组件(例如Button)上调用该方法以便通过使用匿名内部类来注册对象的侦听器时,为什么我们还需要实现Interface类?是不是因为根据定义,接口无法实例化,除非您正在创建实现该接口的抽象方法的Interface类型的对象?
即
aButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// do stuff
}
});
也就是说,通过使用匿名类,我们可以避免显式使整个类实现接口(如标头中声明的那样),而是我们实例化接口的对象(根据接口的定义是不可能的)并在匿名类中实现接口的抽象方法。
因此,只能在接口实例化一个对象,因为在那个时间点,需要实现一个契约来实现接口的方法,这样做,允许我们制作来自界面的对象?
因此,我们之所以能够实现接口的actionPerformed()方法是唯一可能的原因,因为我们已经从接口实例化了一个对象(同时要求我们履行实现抽象方法的合同) ?所以可以说我们是隐含地'通过接口的原位实例化实现接口(作为addActionListener参数)?
答案 0 :(得分:3)
您没有实例化界面。
您正在定义和实例化实现该接口的实际具体类。您需要实现接口中声明的每个方法,就像您编写了一个实现接口的“普通”类一样。
匿名类构造可以省去必须命名一个只会在代码中的一个非常特定的位置使用的类的麻烦。但如果你想,你可以决定这样做。在幕后,它是相同的 - 你已经定义了一个类来实现接口,然后实例化该类。