如何实例化接口?

时间:2011-11-17 07:54:18

标签: java swing interface awt actionlistener

在Swing中我使用ActionListener或任何其他Listener接口。

一般来说,我无法创建Interface的对象。 如果我使用带有任何构造函数名称的new运算符,则会创建一个对象。

我的代码存在问题:

  

jbtOK:是一些按钮对象

     

ActionListener是一个接口。

如何在ActionListener()方法中使用新的addActionListener

因为创建了一个对象。但是,我无法从界面创建对象。

它只能在内部类中使用吗?即,在内部类中,我可以创建接口对象:

jbtOK.addActionListener(new ActionListener() {
       public void actionPerformed(ActionEvent e) {

         System.out.println("hi");
       }
     });

3 个答案:

答案 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接口或任何其他接口的抽象方法,以便将这些方法与对象一起使用。