我已经多次遇到此代码,我想知道它的含义或等效于:
A a = new A() {
// declare some methods and whatever
};
以上是什么意思?它等同于什么(如果它等同于任何东西)?
我已经多次遇到此代码,我想知道它的含义或等效于:
A a = new A() {
// declare some methods and whatever
};
以上是什么意思?它等同于什么(如果它等同于任何东西)?
他们声明了一个匿名类。类A
(可能)是接口或抽象类,必须具有实现的方法才能成为A
. Java 允许您使用匿名类动态定义这些方法。
例如,只有一种方法可以实现 for ActionListener
,即actionPerformed(ActionEvent)
. 很多时候,在匿名类中定义该方法更容易,如下所示:
ActionListener myListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
// do other stuff for action performed
}
}
根据OP的评论进行编辑
您当然可以为一个类创建一个类文件ActionListener
并创建一个类的新实例,而不是创建一个匿名类。也就是说,假设您可以在单独的课程中完成您需要做的所有事情。很多时候定义了匿名类和内部类,以便您可以访问外部类的字段和方法。如果内部类“属于”外部类而不属于其他类,那么定义内部类或匿名类也是面向对象的许多倍。
它正在创建一个匿名内部类:a
不是A
自身的实例,而是新创建的子类的实例A
,就好像你写了类似的东西
public class MadeUpName extends A {
...
}
A a = new MadeUpName();
但不必编造一个MadeUpName
并且用更少的措辞。
这是一个匿名类。虽然我从未广泛使用过它们,但它们对于您只使用一次类或不想用不会被重用的东西“污染”您的顶级类层次结构的情况很方便.
您可以将它们放在一个类中(使用标准的public、private、protected关键字)或类方法(内部类)。
我找不到一个非常好的、简洁的文章/教程,但这没关系:
有关的:
这是扩展/实现类/接口 A 的匿名类的实例化。