如何实例化一个接口?
在Swing中,我使用的是ActionListener
或任何其他Listener接口。如何实例化一个接口?
通常我不能创建接口的对象。 如果我使用具有任何构造函数名称的new运算符创建一个对象。
我有一个问题,我下面的代码:
jbtOK:一些按钮对象
的ActionListener是一个接口。
如何在addActionListener
方法中使用新的ActionListener()
?
由于创建了一个对象。但是,我无法从界面创建对象。
它只能在内部类中使用吗?即,在内部类我可以创建接口的对象:
jbtOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hi");
}
});
http://mindprod.com/jgloss/interface.html#INSTANTIATING:
你不能直接实例化的接口,但可以实例化一个实现了接口的类。对一个对象的引用可以通过类名,通过它的一个超类名或者它的一个接口名。
请阅读关于匿名类的一些内容。
new class-name ([ argument-list ]) { class-body }
这是你实例化和传递到您的addActionListener方法,方法的匿名类。 addActionListener接受一个ActionListener作为参数,所以既然你提供了一个actionPerformed方法,它假定你传递给它的匿名类是一个ActionListener。
尝试更改此actionPerformed方法的名称。由于您传递的匿名类没有实现ActionListener接口,因此它将不再工作。查看编译器获得的错误消息。
与新关键字你创建对象到内存中,当你创建一个接口的对象对象需要实现。让我们比较明确的类
假设你定义了实现这个ActionListener接口的类你做了什么?
class MyActionListener implements ActionListener{
// now here you need implement all of the method which defined into the ActionListener interface
}
现在你可以使用这个类来注册监听行动像这样
jbtOK.addActionListener(new MyActionListener());
这是明确的执行和直接执行,它被称为匿名类作为您ActionListener接口
这里定义是的,我认为他已经忘记了“实现ActionListener”这个词。 – Charliemops
如果我理解你的问题,你不能使用接口的方法,因为接口的所有方法都是抽象的(空的,没有实现),那么你必须实现你的接口所要求的所有方法。
例如,因为你有一个ActionListener
添加一个按钮,然后将它关联到叫actionPerformed
方法操作,你必须在你的代码的第一行声明:
public class your_class implements ActionListener
凡关键字需要implements
来指示您正在实现接口或任何其他接口的抽象方法,以将这些方法与您的对象一起使用。
这是一个问题,没有任何研究 – Kowser
这不是一个坏问题。这只是非常公式化。 sri问:“如何实例化接口?我们已经了解到接口不是类!” –
初学者的好问题,每个人都有第一次!然而,在这里问这是一个很好的实践研究... – Charliemops