为什么Java接口可以在这些代码中实例化?
可能重复:为什么Java接口可以在这些代码中实例化?,java,class,interface,instantiation,Java,Class,Interface,Instantiation,可能重复: 我是Java新手。根据我的理解: 我们无法实例化接口。我们只能实例化实现接口的类 new关键字用于从类创建对象 然而,当我阅读一些Java程序的源代码时,我发现有时会实例化接口。例如: 示例1: JButtonObject.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //codes } }); SwingUti
我是Java新手。根据我的理解:
- 我们无法实例化
。我们只能实例化实现接口
接口的
类
关键字用于从类创建对象new
JButtonObject.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//codes
}
});
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//codes
}
});
示例2:
JButtonObject.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//codes
}
});
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//codes
}
});
在上面的示例中,ActionListener和Runnable都是Java接口。我可以知道为什么它们可以在这些代码中实例化吗
实例化接口的目的是什么?请参阅,我们似乎应该创建一个实现接口的类的实例。该代码没有实例化接口,而是一个实现
ActionListener
或Runnable
的匿名类
匿名类是没有名称的本地类。匿名班级
在单个简洁表达式中使用
新接线员
代码正在匿名创建ActionListener
的实例,这意味着该类实际上没有任何名称
编译该类后,您可以在输出中看到一个类YourClass$1.class
。$1
仅仅意味着类是一个匿名类,并且编号1
由编译器生成。当您有两个匿名类时,它将在编译的类中包含类似于YourClass$1.class
和YourClass$2.class
的内容
见
对象实现了可运行的。上面的示例没有创建接口的新实例-在new关键字之后有当前接口的实现方法。阅读有关匿名类的更多信息