如何实例化一个接口?

问题描述:

在Swing中,我使用的是ActionListener或任何其他Listener接口。如何实例化一个接口?

通常我不能创建接口的对象。 如果我使用具有任何构造函数名称的new运算符创建一个对象。

我有一个问题,我下面的代码:

jbtOK:一些按钮对象

的ActionListener是一个接口。

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

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

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

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

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

这是一个问题,没有任何研究 – Kowser

+1

这不是一个坏问题。这只是非常公式化。 sri问:“如何实例化接口?我们已经了解到接口不是类!” –

+0

初学者的好问题,每个人都有第一次!然而,在这里问这是一个很好的实践研究... – Charliemops

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接口

这里定义
+0

是的,我认为他已经忘记了“实现ActionListener”这个词。 – Charliemops

如果我理解你的问题,你不能使用接口的方法,因为接口的所有方法都是抽象的(空的,没有实现),那么你必须实现你的接口所要求的所有方法。

例如,因为你有一个ActionListener添加一个按钮,然后将它关联到叫actionPerformed方法操作,你必须在你的代码的第一行声明:

public class your_class implements ActionListener 

凡关键字需要implements来指示您正在实现接口或任何其他接口的抽象方法,以将这些方法与您的对象一起使用。