在Swing中我使用ActionListener
或任何其他Listener接口。
一般来说,我无法创建Interface的对象。 如果我使用带有任何构造函数名称的new运算符,则会创建一个对象。
我的代码存在问题:
jbtOK:是一些按钮对象
ActionListener是一个接口。
如何在ActionListener()
方法中使用新的addActionListener
?
因为创建了一个对象。但是,我无法从界面创建对象。
它只能在内部类中使用吗?即,在内部类中,我可以创建接口对象:
jbtOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("hi");
}
});
答案 0 :(得分:3)
使用 new 关键字将对象创建到内存中,当您创建接口的对象对象时,需要实现它。让我们与显式类
进行比较假设您定义了实现此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接口一样调用Anonymous类
答案 1 :(得分:1)
http://mindprod.com/jgloss/interface.html#INSTANTIATING:
您不能直接实例化接口,但可以实例化实现接口的类。对Object的引用可以通过类名,通过其一个超类名或其中一个接口名来实现。
还阅读有关匿名课程的一些内容。
new class-name ( [ argument-list ] ) { class-body }
您正在实例化并传递给addActionListener方法的匿名类。 addActionListener将ActionListener作为参数,因此,由于您提供了actionPerformed方法,因此它假定您传递给它的匿名类是ActionListener。
尝试更改此actionPerformed方法的名称。它将不再起作用,因为您传递的匿名类未实现ActionListener接口。请参阅编译器收到的错误消息。
答案 2 :(得分:1)
如果我理解你的问题,就不能使用接口的方法,因为接口的所有方法都是抽象的(空的,没有实现),那么你必须实现接口请求的所有方法。
例如,因为您必须向按钮添加ActionListener
,然后将其与actionPerformed
方法中调用的操作相关联,您必须在代码的第一行声明:
public class your_class implements ActionListener
需要关键字implements
来表示您正在实现ActionListener
接口或任何其他接口的抽象方法,以便将这些方法与对象一起使用。