【发布时间】:2015-04-25 04:27:14
【问题描述】:
我会用一个例子来说明我的问题:
addActionListener 方法接受一个 ActionListener 接口作为它的唯一参数。
那么当在一个对象/组件(比如一个Button)上调用那个方法来注册一个对象的监听器时,通过使用匿名内部类,为什么我们还需要实现Interface类?是不是因为根据定义,接口不能被实例化,除非你当然要创建一个实现该接口抽象方法的接口类型的对象?
即
aButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// do stuff
}
});
也就是说,通过使用匿名类,我们可以显式避免使整个类实现接口(如在头文件中声明的那样),而是实例化接口的一个对象(根据接口的定义,这是不可能的)并在匿名类中实现接口的抽象方法。
因此只能实例化接口对象,因为在那个时间点,需要履行合同来实现接口的方法,并且这样做允许我们从接口?
因此,我们之所以可以实现接口的 actionPerformed() 方法,是因为我们已经从接口实例化了一个对象(这同时要求我们履行实现抽象方法的约定) ?那么是否可以说我们通过接口的原位实例化(作为 addActionListener 参数)“隐式”实现接口?
【问题讨论】:
-
我认为你想多了。您正在定义一个实现接口的具体类,并实例化该具体类的对象。就像你有一个实现接口的命名类一样,除了没有给类命名。恐怕我不明白你在问什么。
-
接口可以看作是定义了一组函数的契约,任何实现类都保证提供这些函数。
addActionListener说“我需要一些可以做ActionListener的东西”
标签: java swing oop interface anonymous-class