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
提供代码。这似乎是一个不错的教程。