Java——这些类是什么类型的;哪个是匿名内部类?

Java——这些类是什么类型的;哪个是匿名内部类?,java,actionlistener,inner-classes,anonymous-inner-class,Java,Actionlistener,Inner Classes,Anonymous Inner Class,我在网上读过几篇互相矛盾的文章。我认为这将是一个匿名内部类的示例: button.addActionListener(new ActionListener() { public void actionPerfored(ActionEvent e) { // do something. } }); ActionListener myListener = new ActionListener() { public void actionPerformed(A

我在网上读过几篇互相矛盾的文章。我认为这将是一个匿名内部类的示例:

button.addActionListener(new ActionListener() {
    public void actionPerfored(ActionEvent e) {
       // do something.
    }
});
ActionListener myListener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) {
          // do something.
    }
};
button.addActionListener(myListener);
但是,我也看到它被描述为一个匿名的内部类:

button.addActionListener(new ActionListener() {
    public void actionPerfored(ActionEvent e) {
       // do something.
    }
});
ActionListener myListener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) {
          // do something.
    }
};
button.addActionListener(myListener);

哪个是哪个,为什么?谢谢大家!

他们都是。第二个变量在被添加为动作侦听器之前被分配给一个变量

这与

myList.add(new String("myString"));


它与匿名类无关。

它们都是。第二个变量在被添加为动作侦听器之前被分配给一个变量

这与

myList.add(new String("myString"));


它与匿名类无关。

两者都是匿名内部类。在第二种情况下,您存储了对匿名类的引用,以便以后可以对其调用一些方法。

两者都是匿名内部类。在第二种情况下,您存储了对匿名类的引用,以便以后可以对其调用一些方法。

正如Richante所说,它们都是


想想看,它们都是未命名的,在另一个类中定义。

就像Richante说的,它们都是


想想看,它们都是未命名的,并且是在另一个类中定义的。

它们实际上都是匿名内部类的示例。在第一个示例中,将参数传递给addActionListener()方法时提供匿名内部类。在第二个示例中,创建了对匿名内部类的引用。

两者实际上都是匿名内部类的示例。在第一个示例中,将参数传递给addActionListener()方法时提供匿名内部类。在第二个示例中,创建了对匿名内部类的引用。

请注意,如果要对多个按钮使用同一个操作侦听器,第二个可能会很有用。应该指出,这两个类都是匿名内部类,因为这些类没有名称(与实例名称无关)@Tim
没有与之关联的名称,这是它匿名的原因(
ActionListener
是一个
接口
不是
),而不是
实例
(在本例中是
myListener
)是否有名称;如果您想要一个非匿名类,那么必须执行
类MyClass实现ActionListener{…}
;这个类将被称为
MyClass
。在匿名类中,您定义了一个包含新方法的类,但它没有名称-我们只知道它继承自
ActionListener
@Tim ActionListener是一个接口;如果您尝试执行
myListener=newactionListener()您将得到一个错误,因为ActionListener不是一个类。如果您想要实现ActionListener的对象,则需要为
void ActionPerformed
提供代码。要以非匿名方式执行此操作,您必须在我之前的评论中编写一个新类,如
MyClass
。或者,您可以在构造实例的同时为执行的
void action
提供代码。这似乎是一个不错的教程。请注意,如果您想对多个按钮使用相同的操作侦听器,第二个可能会很有用。应该指出,这两个都是匿名内部类,因为这些类没有名称(与实例名称无关)@Tim
没有与之关联的名称,这是它匿名的原因(
ActionListener
是一个
接口
不是
),而不是
实例
(在本例中是
myListener
)是否有名称;如果您想要一个非匿名类,那么必须执行
类MyClass实现ActionListener{…}
;这个类将被称为
MyClass
。在匿名类中,您定义了一个包含新方法的类,但它没有名称-我们只知道它继承自
ActionListener
@Tim ActionListener是一个接口;如果您尝试执行
myListener=newactionListener()您将得到一个错误,因为ActionListener不是一个类。如果您想要实现ActionListener的对象,则需要为
void ActionPerformed
提供代码。要以非匿名方式执行此操作,您必须在我之前的评论中编写一个新类,如
MyClass
。或者,您可以在构造实例的同时为执行的
void action
提供代码。这似乎是一个不错的教程。